Error on non-identifier rest in destructuring assignment

This commit is contained in:
Nathan Shively-Sanders 2016-11-11 08:56:35 -08:00
parent ea309fe504
commit 9b2b2ca19b
3 changed files with 13 additions and 3 deletions

View File

@ -13941,7 +13941,12 @@ namespace ts {
error(name, Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), declarationNameToString(name));
}
}
else if (property.kind !== SyntaxKind.SpreadAssignment) {
else if (property.kind === SyntaxKind.SpreadAssignment) {
if (property.expression.kind !== SyntaxKind.Identifier) {
error(property.expression, Diagnostics.An_object_rest_element_must_be_an_identifier);
}
}
else {
error(property, Diagnostics.Property_assignment_expected);
}
}

View File

@ -1991,6 +1991,10 @@
"category": "Error",
"code": 2700
},
"An object rest element must be an identifier.": {
"category": "Error",
"code": 2701
},
"Import declaration '{0}' is using private name '{1}'.": {
"category": "Error",

View File

@ -328,8 +328,9 @@ namespace ts {
bindingElements.push(p);
}
}
else if (i === properties.length - 1 && p.kind === SyntaxKind.SpreadAssignment) {
Debug.assert((p as SpreadAssignment).expression.kind === SyntaxKind.Identifier);
else if (i === properties.length - 1 &&
p.kind === SyntaxKind.SpreadAssignment &&
p.expression.kind === SyntaxKind.Identifier) {
if (bindingElements.length) {
emitRestAssignment(bindingElements, value, location, target);
bindingElements = [];