diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c1ad93b04aa..4f381cec2d4 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26194,7 +26194,7 @@ namespace ts { function checkGrammarBindingElement(node: BindingElement) { if (node.dotDotDotToken) { const elements = (node.parent).elements; - if (node !== lastOrUndefined(elements)) { + if (node !== last(elements)) { return grammarErrorOnNode(node, Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern); } @@ -26202,6 +26202,10 @@ namespace ts { return grammarErrorOnNode(node.name, Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); } + if (node.propertyName) { + return grammarErrorOnNode(node.name, Diagnostics.A_rest_element_cannot_have_a_property_name); + } + if (node.initializer) { // Error on equals token which immediately precedes the initializer return grammarErrorAtPos(node, node.initializer.pos - 1, 1, Diagnostics.A_rest_element_cannot_have_an_initializer); diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 6a14aab2aee..332aa5cfbd8 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1976,6 +1976,10 @@ "category": "Error", "code": 2565 }, + "A rest element cannot have a property name.": { + "category": "Error", + "code": 2566 + }, "JSX element attributes type '{0}' may not be a union type.": { "category": "Error", "code": 2600 diff --git a/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.errors.txt b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.errors.txt new file mode 100644 index 00000000000..dc791ca55a3 --- /dev/null +++ b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/objectBindingPattern_restElementWithPropertyName.ts(1,15): error TS2566: A rest element cannot have a property name. + + +==== tests/cases/compiler/objectBindingPattern_restElementWithPropertyName.ts (1 errors) ==== + const { ...a: b } = {}; + ~ +!!! error TS2566: A rest element cannot have a property name. + \ No newline at end of file diff --git a/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.js b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.js new file mode 100644 index 00000000000..a63527b8c35 --- /dev/null +++ b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.js @@ -0,0 +1,15 @@ +//// [objectBindingPattern_restElementWithPropertyName.ts] +const { ...a: b } = {}; + + +//// [objectBindingPattern_restElementWithPropertyName.js] +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +}; +var b = __rest({}, []); diff --git a/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.symbols b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.symbols new file mode 100644 index 00000000000..ba78fcd3486 --- /dev/null +++ b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/objectBindingPattern_restElementWithPropertyName.ts === +const { ...a: b } = {}; +>b : Symbol(b, Decl(objectBindingPattern_restElementWithPropertyName.ts, 0, 7)) + diff --git a/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.types b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.types new file mode 100644 index 00000000000..a03cf5888eb --- /dev/null +++ b/tests/baselines/reference/objectBindingPattern_restElementWithPropertyName.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/objectBindingPattern_restElementWithPropertyName.ts === +const { ...a: b } = {}; +>a : any +>b : {} +>{} : {} + diff --git a/tests/cases/compiler/objectBindingPattern_restElementWithPropertyName.ts b/tests/cases/compiler/objectBindingPattern_restElementWithPropertyName.ts new file mode 100644 index 00000000000..2db67d99405 --- /dev/null +++ b/tests/cases/compiler/objectBindingPattern_restElementWithPropertyName.ts @@ -0,0 +1 @@ +const { ...a: b } = {};