From 3b23ab5fb75e27b2c2a5818a71ca89fd9749ccb0 Mon Sep 17 00:00:00 2001 From: Ryohei Ikegami Date: Sun, 25 Oct 2015 12:23:24 +0900 Subject: [PATCH 1/4] Do not type non-identifier binding name --- src/compiler/checker.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fd6b1d81818..734c2425aef 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9414,7 +9414,9 @@ namespace ts { if (isBindingPattern(node.name)) { for (let element of (node.name).elements) { if (element.kind !== SyntaxKind.OmittedExpression) { - getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); + if (element.name.kind === SyntaxKind.Identifier) { + getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); + } assignBindingElementTypes(element); } } From f7f9bd1d2431c1b2cc2d80f6344d552f0230fb11 Mon Sep 17 00:00:00 2001 From: Ryohei Ikegami Date: Sun, 25 Oct 2015 13:13:38 +0900 Subject: [PATCH 2/4] Add tests for nested destructuring --- .../fourslash/parameterWithNestedDestructuring.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/cases/fourslash/parameterWithNestedDestructuring.ts diff --git a/tests/cases/fourslash/parameterWithNestedDestructuring.ts b/tests/cases/fourslash/parameterWithNestedDestructuring.ts new file mode 100644 index 00000000000..fa3c4e55294 --- /dev/null +++ b/tests/cases/fourslash/parameterWithNestedDestructuring.ts @@ -0,0 +1,10 @@ +/// + +////[[{foo: 'hello', bar: [1]}]] +//// .map(([{foo, bar: [baz]}]) => /*1*/foo + /*2*/baz); + +goTo.marker('1'); +verify.quickInfoIs('var foo: string'); + +goTo.marker('2'); +verify.quickInfoIs('var baz: number'); From a3f09c343bbe1f84f2fdd36fc3b3217bbda660ec Mon Sep 17 00:00:00 2001 From: Ryohei Ikegami Date: Tue, 27 Oct 2015 11:50:43 +0900 Subject: [PATCH 3/4] Add compiler test --- tests/cases/compiler/bindingPatternInParameter01.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tests/cases/compiler/bindingPatternInParameter01.ts diff --git a/tests/cases/compiler/bindingPatternInParameter01.ts b/tests/cases/compiler/bindingPatternInParameter01.ts new file mode 100644 index 00000000000..3b3a4312f87 --- /dev/null +++ b/tests/cases/compiler/bindingPatternInParameter01.ts @@ -0,0 +1,5 @@ +const nestedArray = [[[1, 2]], [[3, 4]]]; + +nestedArray.forEach(([[a, b]]) => { + console.log(a, b); +}); From e64831b2b8f3f16c5da929fa13993c27165b6a55 Mon Sep 17 00:00:00 2001 From: Ryohei Ikegami Date: Tue, 27 Oct 2015 11:59:48 +0900 Subject: [PATCH 4/4] Accept baseline --- .../bindingPatternInParameter01.errors.txt | 12 ++++++++++++ .../reference/bindingPatternInParameter01.js | 14 ++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 tests/baselines/reference/bindingPatternInParameter01.errors.txt create mode 100644 tests/baselines/reference/bindingPatternInParameter01.js diff --git a/tests/baselines/reference/bindingPatternInParameter01.errors.txt b/tests/baselines/reference/bindingPatternInParameter01.errors.txt new file mode 100644 index 00000000000..bee1f47141e --- /dev/null +++ b/tests/baselines/reference/bindingPatternInParameter01.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/bindingPatternInParameter01.ts(4,3): error TS2304: Cannot find name 'console'. + + +==== tests/cases/compiler/bindingPatternInParameter01.ts (1 errors) ==== + const nestedArray = [[[1, 2]], [[3, 4]]]; + + nestedArray.forEach(([[a, b]]) => { + console.log(a, b); + ~~~~~~~ +!!! error TS2304: Cannot find name 'console'. + }); + \ No newline at end of file diff --git a/tests/baselines/reference/bindingPatternInParameter01.js b/tests/baselines/reference/bindingPatternInParameter01.js new file mode 100644 index 00000000000..27b3a59e81e --- /dev/null +++ b/tests/baselines/reference/bindingPatternInParameter01.js @@ -0,0 +1,14 @@ +//// [bindingPatternInParameter01.ts] +const nestedArray = [[[1, 2]], [[3, 4]]]; + +nestedArray.forEach(([[a, b]]) => { + console.log(a, b); +}); + + +//// [bindingPatternInParameter01.js] +var nestedArray = [[[1, 2]], [[3, 4]]]; +nestedArray.forEach(function (_a) { + var _b = _a[0], a = _b[0], b = _b[1]; + console.log(a, b); +});