Merge pull request #3726 from Microsoft/restParamModifier

Disallow modifiers on rest parameters
This commit is contained in:
Jason Freeman 2015-07-02 16:28:38 -07:00
commit ba87e14bea
7 changed files with 64 additions and 1 deletions

View File

@ -1979,8 +1979,8 @@ namespace ts {
function parseParameter(): ParameterDeclaration {
let node = <ParameterDeclaration>createNode(SyntaxKind.Parameter);
node.decorators = parseDecorators();
node.dotDotDotToken = parseOptionalToken(SyntaxKind.DotDotDotToken);
setModifiers(node, parseModifiers());
node.dotDotDotToken = parseOptionalToken(SyntaxKind.DotDotDotToken);
// FormalParameter [Yield,Await]:
// BindingElement[?Yield,?Await]

View File

@ -0,0 +1,21 @@
tests/cases/compiler/restParamModifier.ts(2,17): error TS2370: A rest parameter must be of an array type.
tests/cases/compiler/restParamModifier.ts(2,27): error TS1005: '=' expected.
tests/cases/compiler/restParamModifier.ts(2,27): error TS2304: Cannot find name 'rest'.
tests/cases/compiler/restParamModifier.ts(2,31): error TS1005: ',' expected.
tests/cases/compiler/restParamModifier.ts(2,39): error TS1005: '=' expected.
==== tests/cases/compiler/restParamModifier.ts (5 errors) ====
class C {
constructor(...public rest: string[]) {}
~~~~~~~~~~~~~~
!!! error TS2370: A rest parameter must be of an array type.
~~~~
!!! error TS1005: '=' expected.
~~~~
!!! error TS2304: Cannot find name 'rest'.
~
!!! error TS1005: ',' expected.
~
!!! error TS1005: '=' expected.
}

View File

@ -0,0 +1,12 @@
//// [restParamModifier.ts]
class C {
constructor(...public rest: string[]) {}
}
//// [restParamModifier.js]
var C = (function () {
function C(public, string) {
if (string === void 0) { string = []; }
}
return C;
})();

View File

@ -0,0 +1,9 @@
tests/cases/compiler/restParamModifier2.ts(2,24): error TS1005: ',' expected.
==== tests/cases/compiler/restParamModifier2.ts (1 errors) ====
class C {
constructor(public ...rest: string[]) {}
~~~
!!! error TS1005: ',' expected.
}

View File

@ -0,0 +1,15 @@
//// [restParamModifier2.ts]
class C {
constructor(public ...rest: string[]) {}
}
//// [restParamModifier2.js]
var C = (function () {
function C(public) {
var rest = [];
for (var _i = 1; _i < arguments.length; _i++) {
rest[_i - 1] = arguments[_i];
}
}
return C;
})();

View File

@ -0,0 +1,3 @@
class C {
constructor(...public rest: string[]) {}
}

View File

@ -0,0 +1,3 @@
class C {
constructor(public ...rest: string[]) {}
}