diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8d134ac6839..c957d98b136 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7657,11 +7657,17 @@ module ts { } } else { - if (i === elements.length - 1) { - checkDestructuringAssignment((e).expression, createArrayType(elementType), contextualMapper); + if (i < elements.length - 1) { + error(e, Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); } else { - error(e, Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); + let restExpression = (e).expression; + if (restExpression.kind === SyntaxKind.BinaryExpression && (restExpression).operatorToken.kind === SyntaxKind.EqualsToken) { + error((restExpression).operatorToken, Diagnostics.A_rest_element_cannot_have_an_initializer); + } + else { + checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); + } } } } diff --git a/tests/baselines/reference/restElementWithInitializer2.errors.txt b/tests/baselines/reference/restElementWithInitializer2.errors.txt index 9c4e95e3963..43fbfcfcd2d 100644 --- a/tests/baselines/reference/restElementWithInitializer2.errors.txt +++ b/tests/baselines/reference/restElementWithInitializer2.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/destructuring/restElementWithInitializer2.ts(3,5): error TS2364: Invalid left-hand side of assignment expression. +tests/cases/conformance/es6/destructuring/restElementWithInitializer2.ts(3,7): error TS1186: A rest element cannot have an initializer. ==== tests/cases/conformance/es6/destructuring/restElementWithInitializer2.ts (1 errors) ==== var a: number[]; var x: number[]; [...x = a] = a; // Error, rest element cannot have initializer - ~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. + ~ +!!! error TS1186: A rest element cannot have an initializer. \ No newline at end of file