From b434ee42a85700b1865fc43c180a97edbfecfb2e Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 13 Jan 2015 16:06:34 -0800 Subject: [PATCH 1/6] Added tests. --- ...estructuringPropertyParameters1.errors.txt | 68 +++++++++++++++++++ ...estructuringPropertyParameters2.errors.txt | 53 +++++++++++++++ .../destructuringPropertyParameters2.js | 58 ++++++++++++++++ ...estructuringPropertyParameters3.errors.txt | 53 +++++++++++++++ .../destructuringPropertyParameters3.js | 63 +++++++++++++++++ ...estructuringPropertyParameters4.errors.txt | 57 ++++++++++++++++ .../destructuringPropertyParameters4.js | 65 ++++++++++++++++++ ...estructuringPropertyParameters5.errors.txt | 51 ++++++++++++++ .../destructuringPropertyParameters1.ts | 29 ++++++++ .../destructuringPropertyParameters2.ts | 28 ++++++++ .../destructuringPropertyParameters3.ts | 31 +++++++++ .../destructuringPropertyParameters4.ts | 27 ++++++++ .../destructuringPropertyParameters5.ts | 12 ++++ 13 files changed, 595 insertions(+) create mode 100644 tests/baselines/reference/destructuringPropertyParameters1.errors.txt create mode 100644 tests/baselines/reference/destructuringPropertyParameters2.errors.txt create mode 100644 tests/baselines/reference/destructuringPropertyParameters2.js create mode 100644 tests/baselines/reference/destructuringPropertyParameters3.errors.txt create mode 100644 tests/baselines/reference/destructuringPropertyParameters3.js create mode 100644 tests/baselines/reference/destructuringPropertyParameters4.errors.txt create mode 100644 tests/baselines/reference/destructuringPropertyParameters4.js create mode 100644 tests/baselines/reference/destructuringPropertyParameters5.errors.txt create mode 100644 tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts create mode 100644 tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts create mode 100644 tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts create mode 100644 tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts create mode 100644 tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts diff --git a/tests/baselines/reference/destructuringPropertyParameters1.errors.txt b/tests/baselines/reference/destructuringPropertyParameters1.errors.txt new file mode 100644 index 0000000000000..58625d2d115c7 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters1.errors.txt @@ -0,0 +1,68 @@ +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(16,24): error TS1005: ',' expected. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,26): error TS2339: Property 'x' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,35): error TS2339: Property 'y' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,43): error TS2339: Property 'y' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,52): error TS2339: Property 'z' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,26): error TS2339: Property 'x' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,35): error TS2339: Property 'y' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,43): error TS2339: Property 'y' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,52): error TS2339: Property 'z' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(27,10): error TS2346: Supplied parameters do not match any signature of call target. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(28,6): error TS2346: Supplied parameters do not match any signature of call target. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(28,23): error TS1005: ':' expected. + + +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts (12 errors) ==== + class C1 { + constructor(public [x, y, z]: string[]) { + } + } + + type TupleType1 = [string, number, boolean]; + + class C2 { + constructor(public [x, y, z]: TupleType1) { + } + } + + type ObjType1 = { x: number; y: string; z: boolean } + + class C3 { + constructor(public { x, y, z }: ObjType1) { + ~ +!!! error TS1005: ',' expected. + } + } + + var c1 = new C1([]); + c1 = new C1(["larry", "{curly}", "moe"]); + var useC1Properties = c1.x === c1.y && c1.y === c1.z; + ~ +!!! error TS2339: Property 'x' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'z' does not exist on type 'C1'. + + var c2 = new C2(["10", 10, !!10]); + var useC2Properties = c2.x === c2.y && c2.y === c2.z; + ~ +!!! error TS2339: Property 'x' does not exist on type 'C2'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C2'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C2'. + ~ +!!! error TS2339: Property 'z' does not exist on type 'C2'. + + var c3 = new C3({x: 0, y: "", z: false}); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2346: Supplied parameters do not match any signature of call target. + c3 = new C3({x: 0, "y", z: true}); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2346: Supplied parameters do not match any signature of call target. + ~ +!!! error TS1005: ':' expected. + var useC3Properties = c3.x === c3.y && c3.y === c3.z; \ No newline at end of file diff --git a/tests/baselines/reference/destructuringPropertyParameters2.errors.txt b/tests/baselines/reference/destructuringPropertyParameters2.errors.txt new file mode 100644 index 0000000000000..75d873cf3d653 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters2.errors.txt @@ -0,0 +1,53 @@ +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(9,21): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(13,21): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(17,21): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(21,27): error TS2345: Argument of type '[number, undefined, string]' is not assignable to parameter of type '[number, string, boolean]'. + + +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts (7 errors) ==== + class C1 { + constructor(private k: number, private [a, b, c]: [number, string, boolean]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + ~ +!!! error TS2339: Property 'b' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'C1'. + this.a = a || k; + ~ +!!! error TS2339: Property 'a' does not exist on type 'C1'. + } + } + + public getA() { + return this.a + ~ +!!! error TS2339: Property 'a' does not exist on type 'C1'. + } + + public getB() { + return this.b + ~ +!!! error TS2339: Property 'b' does not exist on type 'C1'. + } + + public getC() { + return this.c; + ~ +!!! error TS2339: Property 'c' does not exist on type 'C1'. + } + } + + var x = new C1(undefined, [0, undefined, ""]); + ~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '[number, undefined, string]' is not assignable to parameter of type '[number, string, boolean]'. + var [x_a, x_b, x_c] = [x.getA(), x.getB(), x.getC()]; + + var y = new C1(10, [0, "", true]); + var [y_a, y_b, y_c] = [y.getA(), y.getB(), y.getC()]; + + var z = new C1(10, [undefined, "", null]); + var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringPropertyParameters2.js b/tests/baselines/reference/destructuringPropertyParameters2.js new file mode 100644 index 0000000000000..026fe4896f850 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters2.js @@ -0,0 +1,58 @@ +//// [destructuringPropertyParameters2.ts] +class C1 { + constructor(private k: number, private [a, b, c]: [number, string, boolean]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + + public getA() { + return this.a + } + + public getB() { + return this.b + } + + public getC() { + return this.c; + } +} + +var x = new C1(undefined, [0, undefined, ""]); +var [x_a, x_b, x_c] = [x.getA(), x.getB(), x.getC()]; + +var y = new C1(10, [0, "", true]); +var [y_a, y_b, y_c] = [y.getA(), y.getB(), y.getC()]; + +var z = new C1(10, [undefined, "", null]); +var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; + + +//// [destructuringPropertyParameters2.js] +var C1 = (function () { + function C1(k, _a) { + var a = _a[0], b = _a[1], c = _a[2]; + this.k = k; + this.[a, b, c] = [a, b, c]; + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + C1.prototype.getA = function () { + return this.a; + }; + C1.prototype.getB = function () { + return this.b; + }; + C1.prototype.getC = function () { + return this.c; + }; + return C1; +})(); +var x = new C1(undefined, [0, undefined, ""]); +var _a = [x.getA(), x.getB(), x.getC()], x_a = _a[0], x_b = _a[1], x_c = _a[2]; +var y = new C1(10, [0, "", true]); +var _b = [y.getA(), y.getB(), y.getC()], y_a = _b[0], y_b = _b[1], y_c = _b[2]; +var z = new C1(10, [undefined, "", null]); +var _c = [z.getA(), z.getB(), z.getC()], z_a = _c[0], z_b = _c[1], z_c = _c[2]; diff --git a/tests/baselines/reference/destructuringPropertyParameters3.errors.txt b/tests/baselines/reference/destructuringPropertyParameters3.errors.txt new file mode 100644 index 0000000000000..15cd0dbdebfb8 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters3.errors.txt @@ -0,0 +1,53 @@ +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(9,21): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(13,21): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(17,21): error TS2339: Property 'c' does not exist on type 'C1'. + + +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts (6 errors) ==== + class C1 { + constructor(private k: T, private [a, b, c]: [T,U,V]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + ~ +!!! error TS2339: Property 'b' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'C1'. + this.a = a || k; + ~ +!!! error TS2339: Property 'a' does not exist on type 'C1'. + } + } + + public getA() { + return this.a + ~ +!!! error TS2339: Property 'a' does not exist on type 'C1'. + } + + public getB() { + return this.b + ~ +!!! error TS2339: Property 'b' does not exist on type 'C1'. + } + + public getC() { + return this.c; + ~ +!!! error TS2339: Property 'c' does not exist on type 'C1'. + } + } + + var x = new C1(undefined, [0, true, ""]); + var [x_a, x_b, x_c] = [x.getA(), x.getB(), x.getC()]; + + var y = new C1(10, [0, true, true]); + var [y_a, y_b, y_c] = [y.getA(), y.getB(), y.getC()]; + + var z = new C1(10, [undefined, "", ""]); + var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; + + var w = new C1(10, [undefined, undefined, undefined]); + var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringPropertyParameters3.js b/tests/baselines/reference/destructuringPropertyParameters3.js new file mode 100644 index 0000000000000..538f58d53f75f --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters3.js @@ -0,0 +1,63 @@ +//// [destructuringPropertyParameters3.ts] +class C1 { + constructor(private k: T, private [a, b, c]: [T,U,V]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + + public getA() { + return this.a + } + + public getB() { + return this.b + } + + public getC() { + return this.c; + } +} + +var x = new C1(undefined, [0, true, ""]); +var [x_a, x_b, x_c] = [x.getA(), x.getB(), x.getC()]; + +var y = new C1(10, [0, true, true]); +var [y_a, y_b, y_c] = [y.getA(), y.getB(), y.getC()]; + +var z = new C1(10, [undefined, "", ""]); +var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; + +var w = new C1(10, [undefined, undefined, undefined]); +var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; + + +//// [destructuringPropertyParameters3.js] +var C1 = (function () { + function C1(k, _a) { + var a = _a[0], b = _a[1], c = _a[2]; + this.k = k; + this.[a, b, c] = [a, b, c]; + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + C1.prototype.getA = function () { + return this.a; + }; + C1.prototype.getB = function () { + return this.b; + }; + C1.prototype.getC = function () { + return this.c; + }; + return C1; +})(); +var x = new C1(undefined, [0, true, ""]); +var _a = [x.getA(), x.getB(), x.getC()], x_a = _a[0], x_b = _a[1], x_c = _a[2]; +var y = new C1(10, [0, true, true]); +var _b = [y.getA(), y.getB(), y.getC()], y_a = _b[0], y_b = _b[1], y_c = _b[2]; +var z = new C1(10, [undefined, "", ""]); +var _c = [z.getA(), z.getB(), z.getC()], z_a = _c[0], z_b = _c[1], z_c = _c[2]; +var w = new C1(10, [undefined, undefined, undefined]); +var _d = [z.getA(), z.getB(), z.getC()], z_a = _d[0], z_b = _d[1], z_c = _d[2]; diff --git a/tests/baselines/reference/destructuringPropertyParameters4.errors.txt b/tests/baselines/reference/destructuringPropertyParameters4.errors.txt new file mode 100644 index 0000000000000..f8c9e899ebb51 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters4.errors.txt @@ -0,0 +1,57 @@ +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(4,59): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(4,83): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(5,18): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(10,21): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(14,21): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(18,21): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,24): error TS2339: Property 'x' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,34): error TS2339: Property 'y' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,44): error TS2339: Property 'z' does not exist on type 'C2'. + + +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts (9 errors) ==== + + class C1 { + constructor(private k: T, protected [a, b, c]: [T,U,V]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + ~ +!!! error TS2339: Property 'b' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'c' does not exist on type 'C1'. + this.a = a || k; + ~ +!!! error TS2339: Property 'a' does not exist on type 'C1'. + } + } + + public getA() { + return this.a + ~ +!!! error TS2339: Property 'a' does not exist on type 'C1'. + } + + public getB() { + return this.b + ~ +!!! error TS2339: Property 'b' does not exist on type 'C1'. + } + + public getC() { + return this.c; + ~ +!!! error TS2339: Property 'c' does not exist on type 'C1'. + } + } + + class C2 extends C1 { + public doSomethingWithSuperProperties() { + return `${this.x} ${this.y} ${this.z}`; + ~ +!!! error TS2339: Property 'x' does not exist on type 'C2'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C2'. + ~ +!!! error TS2339: Property 'z' does not exist on type 'C2'. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringPropertyParameters4.js b/tests/baselines/reference/destructuringPropertyParameters4.js new file mode 100644 index 0000000000000..02784ad5f8263 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters4.js @@ -0,0 +1,65 @@ +//// [destructuringPropertyParameters4.ts] + +class C1 { + constructor(private k: T, protected [a, b, c]: [T,U,V]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + + public getA() { + return this.a + } + + public getB() { + return this.b + } + + public getC() { + return this.c; + } +} + +class C2 extends C1 { + public doSomethingWithSuperProperties() { + return `${this.x} ${this.y} ${this.z}`; + } +} + + +//// [destructuringPropertyParameters4.js] +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var C1 = (function () { + function C1(k, [a, b, c]) { + this.k = k; + this.[a, b, c] = [a, b, c]; + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + C1.prototype.getA = function () { + return this.a; + }; + C1.prototype.getB = function () { + return this.b; + }; + C1.prototype.getC = function () { + return this.c; + }; + return C1; +})(); +var C2 = (function (_super) { + __extends(C2, _super); + function C2() { + _super.apply(this, arguments); + } + C2.prototype.doSomethingWithSuperProperties = function () { + return `${this.x} ${this.y} ${this.z}`; + }; + return C2; +})(C1); diff --git a/tests/baselines/reference/destructuringPropertyParameters5.errors.txt b/tests/baselines/reference/destructuringPropertyParameters5.errors.txt new file mode 100644 index 0000000000000..4531b82d647f5 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters5.errors.txt @@ -0,0 +1,51 @@ +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(5,27): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(5,31): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x2' and no string index signature. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(5,35): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x3' and no string index signature. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,29): error TS2339: Property 'x1' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,40): error TS2339: Property 'x2' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,51): error TS2339: Property 'x3' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,62): error TS2339: Property 'y' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,72): error TS2339: Property 'z' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(11,16): error TS2345: Argument of type '[{ x1: number; x2: string; x3: boolean; }, string, boolean]' is not assignable to parameter of type '[{ x: number; y: string; z: boolean; }, number, string]'. + Types of property '0' are incompatible. + Type '{ x1: number; x2: string; x3: boolean; }' is not assignable to type '{ x: number; y: string; z: boolean; }'. + Property 'x' is missing in type '{ x1: number; x2: string; x3: boolean; }'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(11,56): error TS1005: ',' expected. + + +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts (10 errors) ==== + type ObjType1 = { x: number; y: string; z: boolean } + type TupleType1 = [ObjType1, number, string] + + class C1 { + constructor(public [{ x1, x2, x3 }, y, z]: TupleType1) { + ~~ +!!! error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. + ~~ +!!! error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x2' and no string index signature. + ~~ +!!! error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x3' and no string index signature. + var foo: any = x1 || x2 || x3 || y || z; + var bar: any = this.x1 || this.x2 || this.x3 || this.y || this.z; + ~~ +!!! error TS2339: Property 'x1' does not exist on type 'C1'. + ~~ +!!! error TS2339: Property 'x2' does not exist on type 'C1'. + ~~ +!!! error TS2339: Property 'x3' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C1'. + ~ +!!! error TS2339: Property 'z' does not exist on type 'C1'. + } + } + + var a = new C1([{ x1: 10, x2: "", x3: true }, "", false); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '[{ x1: number; x2: string; x3: boolean; }, string, boolean]' is not assignable to parameter of type '[{ x: number; y: string; z: boolean; }, number, string]'. +!!! error TS2345: Types of property '0' are incompatible. +!!! error TS2345: Type '{ x1: number; x2: string; x3: boolean; }' is not assignable to type '{ x: number; y: string; z: boolean; }'. +!!! error TS2345: Property 'x' is missing in type '{ x1: number; x2: string; x3: boolean; }'. + ~ +!!! error TS1005: ',' expected. + var [a_x1, a_x2, a_x3, a_y, a_z] = [a.x1, a.x2, a.x3, a.y, a.z]; \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts new file mode 100644 index 0000000000000..8571db338e88b --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts @@ -0,0 +1,29 @@ +class C1 { + constructor(public [x, y, z]: string[]) { + } +} + +type TupleType1 = [string, number, boolean]; + +class C2 { + constructor(public [x, y, z]: TupleType1) { + } +} + +type ObjType1 = { x: number; y: string; z: boolean } + +class C3 { + constructor(public { x, y, z }: ObjType1) { + } +} + +var c1 = new C1([]); +c1 = new C1(["larry", "{curly}", "moe"]); +var useC1Properties = c1.x === c1.y && c1.y === c1.z; + +var c2 = new C2(["10", 10, !!10]); +var useC2Properties = c2.x === c2.y && c2.y === c2.z; + +var c3 = new C3({x: 0, y: "", z: false}); +c3 = new C3({x: 0, "y", z: true}); +var useC3Properties = c3.x === c3.y && c3.y === c3.z; \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts new file mode 100644 index 0000000000000..b7f37809154be --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts @@ -0,0 +1,28 @@ +class C1 { + constructor(private k: number, private [a, b, c]: [number, string, boolean]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + + public getA() { + return this.a + } + + public getB() { + return this.b + } + + public getC() { + return this.c; + } +} + +var x = new C1(undefined, [0, undefined, ""]); +var [x_a, x_b, x_c] = [x.getA(), x.getB(), x.getC()]; + +var y = new C1(10, [0, "", true]); +var [y_a, y_b, y_c] = [y.getA(), y.getB(), y.getC()]; + +var z = new C1(10, [undefined, "", null]); +var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts new file mode 100644 index 0000000000000..6819d024e6a15 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts @@ -0,0 +1,31 @@ +class C1 { + constructor(private k: T, private [a, b, c]: [T,U,V]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + + public getA() { + return this.a + } + + public getB() { + return this.b + } + + public getC() { + return this.c; + } +} + +var x = new C1(undefined, [0, true, ""]); +var [x_a, x_b, x_c] = [x.getA(), x.getB(), x.getC()]; + +var y = new C1(10, [0, true, true]); +var [y_a, y_b, y_c] = [y.getA(), y.getB(), y.getC()]; + +var z = new C1(10, [undefined, "", ""]); +var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; + +var w = new C1(10, [undefined, undefined, undefined]); +var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts new file mode 100644 index 0000000000000..e8a494b227481 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts @@ -0,0 +1,27 @@ +// @target: es6 + +class C1 { + constructor(private k: T, protected [a, b, c]: [T,U,V]) { + if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { + this.a = a || k; + } + } + + public getA() { + return this.a + } + + public getB() { + return this.b + } + + public getC() { + return this.c; + } +} + +class C2 extends C1 { + public doSomethingWithSuperProperties() { + return `${this.x} ${this.y} ${this.z}`; + } +} diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts new file mode 100644 index 0000000000000..94ec1fe27b56e --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts @@ -0,0 +1,12 @@ +type ObjType1 = { x: number; y: string; z: boolean } +type TupleType1 = [ObjType1, number, string] + +class C1 { + constructor(public [{ x1, x2, x3 }, y, z]: TupleType1) { + var foo: any = x1 || x2 || x3 || y || z; + var bar: any = this.x1 || this.x2 || this.x3 || this.y || this.z; + } +} + +var a = new C1([{ x1: 10, x2: "", x3: true }, "", false); +var [a_x1, a_x2, a_x3, a_y, a_z] = [a.x1, a.x2, a.x3, a.y, a.z]; \ No newline at end of file From 372b0a4e15e988be403d267ca67ad658f1ca7225 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 13 Jan 2015 16:24:23 -0800 Subject: [PATCH 2/6] Updated parser lookahead for modifiers to anticipate object literals. --- src/compiler/parser.ts | 5 +++- ...estructuringPropertyParameters1.errors.txt | 25 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b70c4a7a1d5cb..5ae44e5ff398a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1395,7 +1395,10 @@ module ts { } function canFollowModifier(): boolean { - return token === SyntaxKind.OpenBracketToken || token === SyntaxKind.AsteriskToken || isLiteralPropertyName(); + return token === SyntaxKind.OpenBracketToken + || token === SyntaxKind.OpenBraceToken + || token === SyntaxKind.AsteriskToken + || isLiteralPropertyName(); } // True if positioned at the start of a list element diff --git a/tests/baselines/reference/destructuringPropertyParameters1.errors.txt b/tests/baselines/reference/destructuringPropertyParameters1.errors.txt index 58625d2d115c7..d4ed1e27cc00b 100644 --- a/tests/baselines/reference/destructuringPropertyParameters1.errors.txt +++ b/tests/baselines/reference/destructuringPropertyParameters1.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(16,24): error TS1005: ',' expected. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,26): error TS2339: Property 'x' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,35): error TS2339: Property 'y' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,43): error TS2339: Property 'y' does not exist on type 'C1'. @@ -7,12 +6,14 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25 tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,35): error TS2339: Property 'y' does not exist on type 'C2'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,43): error TS2339: Property 'y' does not exist on type 'C2'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,52): error TS2339: Property 'z' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(27,10): error TS2346: Supplied parameters do not match any signature of call target. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(28,6): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(28,23): error TS1005: ':' expected. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,26): error TS2339: Property 'x' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,35): error TS2339: Property 'y' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,43): error TS2339: Property 'y' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,52): error TS2339: Property 'z' does not exist on type 'C3'. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts (12 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts (13 errors) ==== class C1 { constructor(public [x, y, z]: string[]) { } @@ -29,8 +30,6 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(28 class C3 { constructor(public { x, y, z }: ObjType1) { - ~ -!!! error TS1005: ',' expected. } } @@ -58,11 +57,15 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(28 !!! error TS2339: Property 'z' does not exist on type 'C2'. var c3 = new C3({x: 0, y: "", z: false}); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2346: Supplied parameters do not match any signature of call target. c3 = new C3({x: 0, "y", z: true}); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2346: Supplied parameters do not match any signature of call target. ~ !!! error TS1005: ':' expected. - var useC3Properties = c3.x === c3.y && c3.y === c3.z; \ No newline at end of file + var useC3Properties = c3.x === c3.y && c3.y === c3.z; + ~ +!!! error TS2339: Property 'x' does not exist on type 'C3'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C3'. + ~ +!!! error TS2339: Property 'y' does not exist on type 'C3'. + ~ +!!! error TS2339: Property 'z' does not exist on type 'C3'. \ No newline at end of file From e20b22c18bfcdfb838c09831ae391c9282106a3b Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 13 Jan 2015 16:46:41 -0800 Subject: [PATCH 3/6] Minor changes. --- src/compiler/checker.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7604c709fbc71..8ddfb53d21f0d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7189,7 +7189,7 @@ module ts { checkVariableLikeDeclaration(node); var func = getContainingFunction(node); - if (node.flags & (NodeFlags.Public | NodeFlags.Private | NodeFlags.Protected)) { + if (node.flags & NodeFlags.AccessibilityModifier) { func = getContainingFunction(node); if (!(func.kind === SyntaxKind.Constructor && nodeIsPresent(func.body))) { error(node, Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); @@ -7208,17 +7208,20 @@ module ts { checkGrammarIndexSignature(node); } // TODO (yuisu): Remove this check in else-if when SyntaxKind.Construct is moved and ambient context is handled - else if (node.kind === SyntaxKind.FunctionType || node.kind === SyntaxKind.FunctionDeclaration || node.kind === SyntaxKind.ConstructorType || + else if (node.kind === SyntaxKind.FunctionType || node.kind === SyntaxKind.FunctionDeclaration || node.kind === SyntaxKind.ConstructorType || node.kind === SyntaxKind.CallSignature || node.kind === SyntaxKind.Constructor || node.kind === SyntaxKind.ConstructSignature){ checkGrammarFunctionLikeDeclaration(node); } checkTypeParameters(node.typeParameters); + forEach(node.parameters, checkParameter); + if (node.type) { checkSourceElement(node.type); } + if (produceDiagnostics) { checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { From f58e6fc4a10762735fcebe603b9ceb65f1afa740 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 13 Jan 2015 17:45:02 -0800 Subject: [PATCH 4/6] Fixed incorrect tests. --- ...estructuringPropertyParameters1.errors.txt | 41 +++++-------- .../destructuringPropertyParameters1.js | 61 +++++++++++++++++++ ...estructuringPropertyParameters4.errors.txt | 14 ++--- .../destructuringPropertyParameters4.js | 4 +- ...estructuringPropertyParameters5.errors.txt | 9 +-- .../destructuringPropertyParameters5.js | 26 ++++++++ .../destructuringPropertyParameters1.ts | 6 +- .../destructuringPropertyParameters4.ts | 2 +- .../destructuringPropertyParameters5.ts | 2 +- 9 files changed, 120 insertions(+), 45 deletions(-) create mode 100644 tests/baselines/reference/destructuringPropertyParameters1.js create mode 100644 tests/baselines/reference/destructuringPropertyParameters5.js diff --git a/tests/baselines/reference/destructuringPropertyParameters1.errors.txt b/tests/baselines/reference/destructuringPropertyParameters1.errors.txt index d4ed1e27cc00b..87debfb17ae8f 100644 --- a/tests/baselines/reference/destructuringPropertyParameters1.errors.txt +++ b/tests/baselines/reference/destructuringPropertyParameters1.errors.txt @@ -2,18 +2,15 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22 tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,35): error TS2339: Property 'y' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,43): error TS2339: Property 'y' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,52): error TS2339: Property 'z' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,26): error TS2339: Property 'x' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,35): error TS2339: Property 'y' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,43): error TS2339: Property 'y' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,52): error TS2339: Property 'z' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(28,23): error TS1005: ':' expected. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,26): error TS2339: Property 'x' does not exist on type 'C3'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,35): error TS2339: Property 'y' does not exist on type 'C3'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,43): error TS2339: Property 'y' does not exist on type 'C3'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,52): error TS2339: Property 'z' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,30): error TS2339: Property 'x' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,36): error TS2339: Property 'y' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,42): error TS2339: Property 'z' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,30): error TS2339: Property 'x' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,36): error TS2339: Property 'y' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,42): error TS2339: Property 'z' does not exist on type 'C3'. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts (13 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts (10 errors) ==== class C1 { constructor(public [x, y, z]: string[]) { } @@ -46,26 +43,20 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29 !!! error TS2339: Property 'z' does not exist on type 'C1'. var c2 = new C2(["10", 10, !!10]); - var useC2Properties = c2.x === c2.y && c2.y === c2.z; - ~ + var [c2_x, c2_y, c2_z] = [c2.x, c2.y, c2.z]; + ~ !!! error TS2339: Property 'x' does not exist on type 'C2'. - ~ + ~ !!! error TS2339: Property 'y' does not exist on type 'C2'. - ~ -!!! error TS2339: Property 'y' does not exist on type 'C2'. - ~ + ~ !!! error TS2339: Property 'z' does not exist on type 'C2'. var c3 = new C3({x: 0, y: "", z: false}); - c3 = new C3({x: 0, "y", z: true}); - ~ -!!! error TS1005: ':' expected. - var useC3Properties = c3.x === c3.y && c3.y === c3.z; - ~ + c3 = new C3({x: 0, "y": "y", z: true}); + var [c3_x, c3_y, c3_z] = [c3.x, c3.y, c3.z]; + ~ !!! error TS2339: Property 'x' does not exist on type 'C3'. - ~ + ~ !!! error TS2339: Property 'y' does not exist on type 'C3'. - ~ -!!! error TS2339: Property 'y' does not exist on type 'C3'. - ~ + ~ !!! error TS2339: Property 'z' does not exist on type 'C3'. \ No newline at end of file diff --git a/tests/baselines/reference/destructuringPropertyParameters1.js b/tests/baselines/reference/destructuringPropertyParameters1.js new file mode 100644 index 0000000000000..95f3bc9736fd2 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters1.js @@ -0,0 +1,61 @@ +//// [destructuringPropertyParameters1.ts] +class C1 { + constructor(public [x, y, z]: string[]) { + } +} + +type TupleType1 = [string, number, boolean]; + +class C2 { + constructor(public [x, y, z]: TupleType1) { + } +} + +type ObjType1 = { x: number; y: string; z: boolean } + +class C3 { + constructor(public { x, y, z }: ObjType1) { + } +} + +var c1 = new C1([]); +c1 = new C1(["larry", "{curly}", "moe"]); +var useC1Properties = c1.x === c1.y && c1.y === c1.z; + +var c2 = new C2(["10", 10, !!10]); +var [c2_x, c2_y, c2_z] = [c2.x, c2.y, c2.z]; + +var c3 = new C3({x: 0, y: "", z: false}); +c3 = new C3({x: 0, "y": "y", z: true}); +var [c3_x, c3_y, c3_z] = [c3.x, c3.y, c3.z]; + +//// [destructuringPropertyParameters1.js] +var C1 = (function () { + function C1(_a) { + var x = _a[0], y = _a[1], z = _a[2]; + this.[x, y, z] = [x, y, z]; + } + return C1; +})(); +var C2 = (function () { + function C2(_a) { + var x = _a[0], y = _a[1], z = _a[2]; + this.[x, y, z] = [x, y, z]; + } + return C2; +})(); +var C3 = (function () { + function C3(_a) { + var x = _a.x, y = _a.y, z = _a.z; + this.{ x, y, z } = { x, y, z }; + } + return C3; +})(); +var c1 = new C1([]); +c1 = new C1(["larry", "{curly}", "moe"]); +var useC1Properties = c1.x === c1.y && c1.y === c1.z; +var c2 = new C2(["10", 10, !!10]); +var _a = [c2.x, c2.y, c2.z], c2_x = _a[0], c2_y = _a[1], c2_z = _a[2]; +var c3 = new C3({ x: 0, y: "", z: false }); +c3 = new C3({ x: 0, "y": "y", z: true }); +var _b = [c3.x, c3.y, c3.z], c3_x = _b[0], c3_y = _b[1], c3_z = _b[2]; diff --git a/tests/baselines/reference/destructuringPropertyParameters4.errors.txt b/tests/baselines/reference/destructuringPropertyParameters4.errors.txt index f8c9e899ebb51..a83fec307af0b 100644 --- a/tests/baselines/reference/destructuringPropertyParameters4.errors.txt +++ b/tests/baselines/reference/destructuringPropertyParameters4.errors.txt @@ -4,9 +4,9 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(5, tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(10,21): error TS2339: Property 'a' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(14,21): error TS2339: Property 'b' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(18,21): error TS2339: Property 'c' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,24): error TS2339: Property 'x' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,34): error TS2339: Property 'y' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,44): error TS2339: Property 'z' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,24): error TS2339: Property 'a' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,34): error TS2339: Property 'b' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,44): error TS2339: Property 'c' does not exist on type 'C2'. ==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts (9 errors) ==== @@ -45,13 +45,13 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24 class C2 extends C1 { public doSomethingWithSuperProperties() { - return `${this.x} ${this.y} ${this.z}`; + return `${this.a} ${this.b} ${this.c}`; ~ -!!! error TS2339: Property 'x' does not exist on type 'C2'. +!!! error TS2339: Property 'a' does not exist on type 'C2'. ~ -!!! error TS2339: Property 'y' does not exist on type 'C2'. +!!! error TS2339: Property 'b' does not exist on type 'C2'. ~ -!!! error TS2339: Property 'z' does not exist on type 'C2'. +!!! error TS2339: Property 'c' does not exist on type 'C2'. } } \ No newline at end of file diff --git a/tests/baselines/reference/destructuringPropertyParameters4.js b/tests/baselines/reference/destructuringPropertyParameters4.js index 02784ad5f8263..4aa796a4f3771 100644 --- a/tests/baselines/reference/destructuringPropertyParameters4.js +++ b/tests/baselines/reference/destructuringPropertyParameters4.js @@ -22,7 +22,7 @@ class C1 { class C2 extends C1 { public doSomethingWithSuperProperties() { - return `${this.x} ${this.y} ${this.z}`; + return `${this.a} ${this.b} ${this.c}`; } } @@ -59,7 +59,7 @@ var C2 = (function (_super) { _super.apply(this, arguments); } C2.prototype.doSomethingWithSuperProperties = function () { - return `${this.x} ${this.y} ${this.z}`; + return `${this.a} ${this.b} ${this.c}`; }; return C2; })(C1); diff --git a/tests/baselines/reference/destructuringPropertyParameters5.errors.txt b/tests/baselines/reference/destructuringPropertyParameters5.errors.txt index 4531b82d647f5..cdb9bc1547694 100644 --- a/tests/baselines/reference/destructuringPropertyParameters5.errors.txt +++ b/tests/baselines/reference/destructuringPropertyParameters5.errors.txt @@ -10,10 +10,9 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(11 Types of property '0' are incompatible. Type '{ x1: number; x2: string; x3: boolean; }' is not assignable to type '{ x: number; y: string; z: boolean; }'. Property 'x' is missing in type '{ x1: number; x2: string; x3: boolean; }'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(11,56): error TS1005: ',' expected. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts (10 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts (9 errors) ==== type ObjType1 = { x: number; y: string; z: boolean } type TupleType1 = [ObjType1, number, string] @@ -40,12 +39,10 @@ tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(11 } } - var a = new C1([{ x1: 10, x2: "", x3: true }, "", false); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + var a = new C1([{ x1: 10, x2: "", x3: true }, "", false]); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '[{ x1: number; x2: string; x3: boolean; }, string, boolean]' is not assignable to parameter of type '[{ x: number; y: string; z: boolean; }, number, string]'. !!! error TS2345: Types of property '0' are incompatible. !!! error TS2345: Type '{ x1: number; x2: string; x3: boolean; }' is not assignable to type '{ x: number; y: string; z: boolean; }'. !!! error TS2345: Property 'x' is missing in type '{ x1: number; x2: string; x3: boolean; }'. - ~ -!!! error TS1005: ',' expected. var [a_x1, a_x2, a_x3, a_y, a_z] = [a.x1, a.x2, a.x3, a.y, a.z]; \ No newline at end of file diff --git a/tests/baselines/reference/destructuringPropertyParameters5.js b/tests/baselines/reference/destructuringPropertyParameters5.js new file mode 100644 index 0000000000000..16f551a24b7b8 --- /dev/null +++ b/tests/baselines/reference/destructuringPropertyParameters5.js @@ -0,0 +1,26 @@ +//// [destructuringPropertyParameters5.ts] +type ObjType1 = { x: number; y: string; z: boolean } +type TupleType1 = [ObjType1, number, string] + +class C1 { + constructor(public [{ x1, x2, x3 }, y, z]: TupleType1) { + var foo: any = x1 || x2 || x3 || y || z; + var bar: any = this.x1 || this.x2 || this.x3 || this.y || this.z; + } +} + +var a = new C1([{ x1: 10, x2: "", x3: true }, "", false]); +var [a_x1, a_x2, a_x3, a_y, a_z] = [a.x1, a.x2, a.x3, a.y, a.z]; + +//// [destructuringPropertyParameters5.js] +var C1 = (function () { + function C1(_a) { + var _b = _a[0], x1 = _b.x1, x2 = _b.x2, x3 = _b.x3, y = _a[1], z = _a[2]; + this.[{ x1, x2, x3 }, y, z] = [{ x1, x2, x3 }, y, z]; + var foo = x1 || x2 || x3 || y || z; + var bar = this.x1 || this.x2 || this.x3 || this.y || this.z; + } + return C1; +})(); +var a = new C1([{ x1: 10, x2: "", x3: true }, "", false]); +var _a = [a.x1, a.x2, a.x3, a.y, a.z], a_x1 = _a[0], a_x2 = _a[1], a_x3 = _a[2], a_y = _a[3], a_z = _a[4]; diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts index 8571db338e88b..ba73adc9fde21 100644 --- a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts @@ -22,8 +22,8 @@ c1 = new C1(["larry", "{curly}", "moe"]); var useC1Properties = c1.x === c1.y && c1.y === c1.z; var c2 = new C2(["10", 10, !!10]); -var useC2Properties = c2.x === c2.y && c2.y === c2.z; +var [c2_x, c2_y, c2_z] = [c2.x, c2.y, c2.z]; var c3 = new C3({x: 0, y: "", z: false}); -c3 = new C3({x: 0, "y", z: true}); -var useC3Properties = c3.x === c3.y && c3.y === c3.z; \ No newline at end of file +c3 = new C3({x: 0, "y": "y", z: true}); +var [c3_x, c3_y, c3_z] = [c3.x, c3.y, c3.z]; \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts index e8a494b227481..7a83e5f4d4b99 100644 --- a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts @@ -22,6 +22,6 @@ class C1 { class C2 extends C1 { public doSomethingWithSuperProperties() { - return `${this.x} ${this.y} ${this.z}`; + return `${this.a} ${this.b} ${this.c}`; } } diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts index 94ec1fe27b56e..02f9b780ad99d 100644 --- a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts +++ b/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts @@ -8,5 +8,5 @@ class C1 { } } -var a = new C1([{ x1: 10, x2: "", x3: true }, "", false); +var a = new C1([{ x1: 10, x2: "", x3: true }, "", false]); var [a_x1, a_x2, a_x3, a_y, a_z] = [a.x1, a.x2, a.x3, a.y, a.z]; \ No newline at end of file From 61e2eb6b8913882834862872a1ed1875bafacf73 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 14 Jan 2015 14:20:32 -0800 Subject: [PATCH 5/6] Renamed tests. --- ...tructuringParameterProperties1.errors.txt} | 22 +++++++++---------- ...s => destructuringParameterProperties1.js} | 4 ++-- ...tructuringParameterProperties2.errors.txt} | 16 +++++++------- ...s => destructuringParameterProperties2.js} | 4 ++-- ...tructuringParameterProperties3.errors.txt} | 14 ++++++------ ...s => destructuringParameterProperties3.js} | 4 ++-- ...tructuringParameterProperties4.errors.txt} | 20 ++++++++--------- ...s => destructuringParameterProperties4.js} | 4 ++-- ...tructuringParameterProperties5.errors.txt} | 20 ++++++++--------- ...s => destructuringParameterProperties5.js} | 4 ++-- ...s => destructuringParameterProperties1.ts} | 0 ...s => destructuringParameterProperties2.ts} | 0 ...s => destructuringParameterProperties3.ts} | 0 ...s => destructuringParameterProperties4.ts} | 0 ...s => destructuringParameterProperties5.ts} | 0 15 files changed, 56 insertions(+), 56 deletions(-) rename tests/baselines/reference/{destructuringPropertyParameters1.errors.txt => destructuringParameterProperties1.errors.txt} (52%) rename tests/baselines/reference/{destructuringPropertyParameters1.js => destructuringParameterProperties1.js} (92%) rename tests/baselines/reference/{destructuringPropertyParameters2.errors.txt => destructuringParameterProperties2.errors.txt} (57%) rename tests/baselines/reference/{destructuringPropertyParameters2.js => destructuringParameterProperties2.js} (93%) rename tests/baselines/reference/{destructuringPropertyParameters3.errors.txt => destructuringParameterProperties3.errors.txt} (61%) rename tests/baselines/reference/{destructuringPropertyParameters3.js => destructuringParameterProperties3.js} (93%) rename tests/baselines/reference/{destructuringPropertyParameters4.errors.txt => destructuringParameterProperties4.errors.txt} (54%) rename tests/baselines/reference/{destructuringPropertyParameters4.js => destructuringParameterProperties4.js} (92%) rename tests/baselines/reference/{destructuringPropertyParameters5.errors.txt => destructuringParameterProperties5.errors.txt} (57%) rename tests/baselines/reference/{destructuringPropertyParameters5.js => destructuringParameterProperties5.js} (89%) rename tests/cases/conformance/es6/destructuring/{destructuringPropertyParameters1.ts => destructuringParameterProperties1.ts} (100%) rename tests/cases/conformance/es6/destructuring/{destructuringPropertyParameters2.ts => destructuringParameterProperties2.ts} (100%) rename tests/cases/conformance/es6/destructuring/{destructuringPropertyParameters3.ts => destructuringParameterProperties3.ts} (100%) rename tests/cases/conformance/es6/destructuring/{destructuringPropertyParameters4.ts => destructuringParameterProperties4.ts} (100%) rename tests/cases/conformance/es6/destructuring/{destructuringPropertyParameters5.ts => destructuringParameterProperties5.ts} (100%) diff --git a/tests/baselines/reference/destructuringPropertyParameters1.errors.txt b/tests/baselines/reference/destructuringParameterProperties1.errors.txt similarity index 52% rename from tests/baselines/reference/destructuringPropertyParameters1.errors.txt rename to tests/baselines/reference/destructuringParameterProperties1.errors.txt index 87debfb17ae8f..c3a9cfc292494 100644 --- a/tests/baselines/reference/destructuringPropertyParameters1.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties1.errors.txt @@ -1,16 +1,16 @@ -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,26): error TS2339: Property 'x' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,35): error TS2339: Property 'y' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,43): error TS2339: Property 'y' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(22,52): error TS2339: Property 'z' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,30): error TS2339: Property 'x' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,36): error TS2339: Property 'y' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(25,42): error TS2339: Property 'z' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,30): error TS2339: Property 'x' does not exist on type 'C3'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,36): error TS2339: Property 'y' does not exist on type 'C3'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts(29,42): error TS2339: Property 'z' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,26): error TS2339: Property 'x' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,35): error TS2339: Property 'y' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,43): error TS2339: Property 'y' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,52): error TS2339: Property 'z' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(25,30): error TS2339: Property 'x' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(25,36): error TS2339: Property 'y' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(25,42): error TS2339: Property 'z' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(29,30): error TS2339: Property 'x' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(29,36): error TS2339: Property 'y' does not exist on type 'C3'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(29,42): error TS2339: Property 'z' does not exist on type 'C3'. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts (10 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts (10 errors) ==== class C1 { constructor(public [x, y, z]: string[]) { } diff --git a/tests/baselines/reference/destructuringPropertyParameters1.js b/tests/baselines/reference/destructuringParameterProperties1.js similarity index 92% rename from tests/baselines/reference/destructuringPropertyParameters1.js rename to tests/baselines/reference/destructuringParameterProperties1.js index 95f3bc9736fd2..cc16cc78de59d 100644 --- a/tests/baselines/reference/destructuringPropertyParameters1.js +++ b/tests/baselines/reference/destructuringParameterProperties1.js @@ -1,4 +1,4 @@ -//// [destructuringPropertyParameters1.ts] +//// [destructuringParameterProperties1.ts] class C1 { constructor(public [x, y, z]: string[]) { } @@ -29,7 +29,7 @@ var c3 = new C3({x: 0, y: "", z: false}); c3 = new C3({x: 0, "y": "y", z: true}); var [c3_x, c3_y, c3_z] = [c3.x, c3.y, c3.z]; -//// [destructuringPropertyParameters1.js] +//// [destructuringParameterProperties1.js] var C1 = (function () { function C1(_a) { var x = _a[0], y = _a[1], z = _a[2]; diff --git a/tests/baselines/reference/destructuringPropertyParameters2.errors.txt b/tests/baselines/reference/destructuringParameterProperties2.errors.txt similarity index 57% rename from tests/baselines/reference/destructuringPropertyParameters2.errors.txt rename to tests/baselines/reference/destructuringParameterProperties2.errors.txt index 75d873cf3d653..3b424f8ae978b 100644 --- a/tests/baselines/reference/destructuringPropertyParameters2.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties2.errors.txt @@ -1,13 +1,13 @@ -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(9,21): error TS2339: Property 'a' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(13,21): error TS2339: Property 'b' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(17,21): error TS2339: Property 'c' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts(21,27): error TS2345: Argument of type '[number, undefined, string]' is not assignable to parameter of type '[number, string, boolean]'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(9,21): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(13,21): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(17,21): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(21,27): error TS2345: Argument of type '[number, undefined, string]' is not assignable to parameter of type '[number, string, boolean]'. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts (7 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts (7 errors) ==== class C1 { constructor(private k: number, private [a, b, c]: [number, string, boolean]) { if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { diff --git a/tests/baselines/reference/destructuringPropertyParameters2.js b/tests/baselines/reference/destructuringParameterProperties2.js similarity index 93% rename from tests/baselines/reference/destructuringPropertyParameters2.js rename to tests/baselines/reference/destructuringParameterProperties2.js index 026fe4896f850..27e190af62f2c 100644 --- a/tests/baselines/reference/destructuringPropertyParameters2.js +++ b/tests/baselines/reference/destructuringParameterProperties2.js @@ -1,4 +1,4 @@ -//// [destructuringPropertyParameters2.ts] +//// [destructuringParameterProperties2.ts] class C1 { constructor(private k: number, private [a, b, c]: [number, string, boolean]) { if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { @@ -29,7 +29,7 @@ var z = new C1(10, [undefined, "", null]); var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; -//// [destructuringPropertyParameters2.js] +//// [destructuringParameterProperties2.js] var C1 = (function () { function C1(k, _a) { var a = _a[0], b = _a[1], c = _a[2]; diff --git a/tests/baselines/reference/destructuringPropertyParameters3.errors.txt b/tests/baselines/reference/destructuringParameterProperties3.errors.txt similarity index 61% rename from tests/baselines/reference/destructuringPropertyParameters3.errors.txt rename to tests/baselines/reference/destructuringParameterProperties3.errors.txt index 15cd0dbdebfb8..44c18d32cc1a7 100644 --- a/tests/baselines/reference/destructuringPropertyParameters3.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties3.errors.txt @@ -1,12 +1,12 @@ -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(9,21): error TS2339: Property 'a' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(13,21): error TS2339: Property 'b' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts(17,21): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(9,21): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(13,21): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(17,21): error TS2339: Property 'c' does not exist on type 'C1'. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts (6 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts (6 errors) ==== class C1 { constructor(private k: T, private [a, b, c]: [T,U,V]) { if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { diff --git a/tests/baselines/reference/destructuringPropertyParameters3.js b/tests/baselines/reference/destructuringParameterProperties3.js similarity index 93% rename from tests/baselines/reference/destructuringPropertyParameters3.js rename to tests/baselines/reference/destructuringParameterProperties3.js index 538f58d53f75f..fe9e69d7e5bc0 100644 --- a/tests/baselines/reference/destructuringPropertyParameters3.js +++ b/tests/baselines/reference/destructuringParameterProperties3.js @@ -1,4 +1,4 @@ -//// [destructuringPropertyParameters3.ts] +//// [destructuringParameterProperties3.ts] class C1 { constructor(private k: T, private [a, b, c]: [T,U,V]) { if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { @@ -32,7 +32,7 @@ var w = new C1(10, [undefined, undefined, undefined]); var [z_a, z_b, z_c] = [z.getA(), z.getB(), z.getC()]; -//// [destructuringPropertyParameters3.js] +//// [destructuringParameterProperties3.js] var C1 = (function () { function C1(k, _a) { var a = _a[0], b = _a[1], c = _a[2]; diff --git a/tests/baselines/reference/destructuringPropertyParameters4.errors.txt b/tests/baselines/reference/destructuringParameterProperties4.errors.txt similarity index 54% rename from tests/baselines/reference/destructuringPropertyParameters4.errors.txt rename to tests/baselines/reference/destructuringParameterProperties4.errors.txt index a83fec307af0b..9d8fdb9d933a0 100644 --- a/tests/baselines/reference/destructuringPropertyParameters4.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties4.errors.txt @@ -1,15 +1,15 @@ -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(4,59): error TS2339: Property 'b' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(4,83): error TS2339: Property 'c' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(5,18): error TS2339: Property 'a' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(10,21): error TS2339: Property 'a' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(14,21): error TS2339: Property 'b' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(18,21): error TS2339: Property 'c' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,24): error TS2339: Property 'a' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,34): error TS2339: Property 'b' does not exist on type 'C2'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts(24,44): error TS2339: Property 'c' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(4,59): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(4,83): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(5,18): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(10,21): error TS2339: Property 'a' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(14,21): error TS2339: Property 'b' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(18,21): error TS2339: Property 'c' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(24,24): error TS2339: Property 'a' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(24,34): error TS2339: Property 'b' does not exist on type 'C2'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(24,44): error TS2339: Property 'c' does not exist on type 'C2'. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts (9 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts (9 errors) ==== class C1 { constructor(private k: T, protected [a, b, c]: [T,U,V]) { diff --git a/tests/baselines/reference/destructuringPropertyParameters4.js b/tests/baselines/reference/destructuringParameterProperties4.js similarity index 92% rename from tests/baselines/reference/destructuringPropertyParameters4.js rename to tests/baselines/reference/destructuringParameterProperties4.js index 4aa796a4f3771..6da6f53a4fe04 100644 --- a/tests/baselines/reference/destructuringPropertyParameters4.js +++ b/tests/baselines/reference/destructuringParameterProperties4.js @@ -1,4 +1,4 @@ -//// [destructuringPropertyParameters4.ts] +//// [destructuringParameterProperties4.ts] class C1 { constructor(private k: T, protected [a, b, c]: [T,U,V]) { @@ -27,7 +27,7 @@ class C2 extends C1 { } -//// [destructuringPropertyParameters4.js] +//// [destructuringParameterProperties4.js] var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/destructuringPropertyParameters5.errors.txt b/tests/baselines/reference/destructuringParameterProperties5.errors.txt similarity index 57% rename from tests/baselines/reference/destructuringPropertyParameters5.errors.txt rename to tests/baselines/reference/destructuringParameterProperties5.errors.txt index cdb9bc1547694..00839fff6623d 100644 --- a/tests/baselines/reference/destructuringPropertyParameters5.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties5.errors.txt @@ -1,18 +1,18 @@ -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(5,27): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(5,31): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x2' and no string index signature. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(5,35): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x3' and no string index signature. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,29): error TS2339: Property 'x1' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,40): error TS2339: Property 'x2' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,51): error TS2339: Property 'x3' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,62): error TS2339: Property 'y' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(7,72): error TS2339: Property 'z' does not exist on type 'C1'. -tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts(11,16): error TS2345: Argument of type '[{ x1: number; x2: string; x3: boolean; }, string, boolean]' is not assignable to parameter of type '[{ x: number; y: string; z: boolean; }, number, string]'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,27): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,31): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x2' and no string index signature. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,35): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x3' and no string index signature. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(7,29): error TS2339: Property 'x1' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(7,40): error TS2339: Property 'x2' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(7,51): error TS2339: Property 'x3' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(7,62): error TS2339: Property 'y' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(7,72): error TS2339: Property 'z' does not exist on type 'C1'. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(11,16): error TS2345: Argument of type '[{ x1: number; x2: string; x3: boolean; }, string, boolean]' is not assignable to parameter of type '[{ x: number; y: string; z: boolean; }, number, string]'. Types of property '0' are incompatible. Type '{ x1: number; x2: string; x3: boolean; }' is not assignable to type '{ x: number; y: string; z: boolean; }'. Property 'x' is missing in type '{ x1: number; x2: string; x3: boolean; }'. -==== tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts (9 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts (9 errors) ==== type ObjType1 = { x: number; y: string; z: boolean } type TupleType1 = [ObjType1, number, string] diff --git a/tests/baselines/reference/destructuringPropertyParameters5.js b/tests/baselines/reference/destructuringParameterProperties5.js similarity index 89% rename from tests/baselines/reference/destructuringPropertyParameters5.js rename to tests/baselines/reference/destructuringParameterProperties5.js index 16f551a24b7b8..d9b1710ae8935 100644 --- a/tests/baselines/reference/destructuringPropertyParameters5.js +++ b/tests/baselines/reference/destructuringParameterProperties5.js @@ -1,4 +1,4 @@ -//// [destructuringPropertyParameters5.ts] +//// [destructuringParameterProperties5.ts] type ObjType1 = { x: number; y: string; z: boolean } type TupleType1 = [ObjType1, number, string] @@ -12,7 +12,7 @@ class C1 { var a = new C1([{ x1: 10, x2: "", x3: true }, "", false]); var [a_x1, a_x2, a_x3, a_y, a_z] = [a.x1, a.x2, a.x3, a.y, a.z]; -//// [destructuringPropertyParameters5.js] +//// [destructuringParameterProperties5.js] var C1 = (function () { function C1(_a) { var _b = _a[0], x1 = _b.x1, x2 = _b.x2, x3 = _b.x3, y = _a[1], z = _a[2]; diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts similarity index 100% rename from tests/cases/conformance/es6/destructuring/destructuringPropertyParameters1.ts rename to tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts similarity index 100% rename from tests/cases/conformance/es6/destructuring/destructuringPropertyParameters2.ts rename to tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts similarity index 100% rename from tests/cases/conformance/es6/destructuring/destructuringPropertyParameters3.ts rename to tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts similarity index 100% rename from tests/cases/conformance/es6/destructuring/destructuringPropertyParameters4.ts rename to tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts diff --git a/tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts similarity index 100% rename from tests/cases/conformance/es6/destructuring/destructuringPropertyParameters5.ts rename to tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts From e19ebc6d3ea63a33beb70a59c698ba2a152c3d73 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 14 Jan 2015 15:30:17 -0800 Subject: [PATCH 6/6] Disallow binding patterns in parameter properties. --- src/compiler/checker.ts | 3 +++ src/compiler/diagnosticInformationMap.generated.ts | 1 + src/compiler/diagnosticMessages.json | 8 ++++++-- .../destructuringParameterProperties1.errors.txt | 11 ++++++++++- .../destructuringParameterProperties2.errors.txt | 5 ++++- .../destructuringParameterProperties3.errors.txt | 5 ++++- .../destructuringParameterProperties4.errors.txt | 5 ++++- .../destructuringParameterProperties5.errors.txt | 5 ++++- 8 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8ddfb53d21f0d..06c4ca9190faa 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10172,6 +10172,9 @@ module ts { else if (node.kind === SyntaxKind.InterfaceDeclaration && flags & NodeFlags.Ambient) { return grammarErrorOnNode(lastDeclare, Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); } + else if (node.kind === SyntaxKind.Parameter && (flags & NodeFlags.AccessibilityModifier) && isBindingPattern((node).name)) { + return grammarErrorOnNode(node, Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); + } } function checkGrammarForDisallowedTrailingComma(list: NodeArray): boolean { diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 2a342fa17d2d0..80e1505569d74 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -146,6 +146,7 @@ module ts { Modifiers_cannot_appear_here: { code: 1184, category: DiagnosticCategory.Error, key: "Modifiers cannot appear here." }, Merge_conflict_marker_encountered: { code: 1185, category: DiagnosticCategory.Error, key: "Merge conflict marker encountered." }, A_rest_element_cannot_have_an_initializer: { code: 1186, category: DiagnosticCategory.Error, key: "A rest element cannot have an initializer." }, + A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: DiagnosticCategory.Error, key: "A parameter property may not be a binding pattern." }, Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index efb2bfe7e9444..704e3ada25ff3 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -224,7 +224,7 @@ "A 'declare' modifier cannot be used with an import declaration.": { "category": "Error", "code": 1079, - "isEarly": true + "isEarly": true }, "Invalid 'reference' directive syntax.": { "category": "Error", @@ -659,7 +659,7 @@ "An implementation cannot be declared in ambient contexts.": { "category": "Error", "code": 1184, - "isEarly": true + "isEarly": true }, "Modifiers cannot appear here.": { "category": "Error", @@ -673,6 +673,10 @@ "category": "Error", "code": 1186 }, + "A parameter property may not be a binding pattern.": { + "category": "Error", + "code": 1187 + }, "Duplicate identifier '{0}'.": { "category": "Error", diff --git a/tests/baselines/reference/destructuringParameterProperties1.errors.txt b/tests/baselines/reference/destructuringParameterProperties1.errors.txt index c3a9cfc292494..b8f3a22b4c580 100644 --- a/tests/baselines/reference/destructuringParameterProperties1.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties1.errors.txt @@ -1,3 +1,6 @@ +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2,17): error TS1187: A parameter property may not be a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(9,17): error TS1187: A parameter property may not be a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(16,17): error TS1187: A parameter property may not be a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,26): error TS2339: Property 'x' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,35): error TS2339: Property 'y' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,43): error TS2339: Property 'y' does not exist on type 'C1'. @@ -10,9 +13,11 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2 tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(29,42): error TS2339: Property 'z' does not exist on type 'C3'. -==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts (10 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts (13 errors) ==== class C1 { constructor(public [x, y, z]: string[]) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1187: A parameter property may not be a binding pattern. } } @@ -20,6 +25,8 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2 class C2 { constructor(public [x, y, z]: TupleType1) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1187: A parameter property may not be a binding pattern. } } @@ -27,6 +34,8 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2 class C3 { constructor(public { x, y, z }: ObjType1) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1187: A parameter property may not be a binding pattern. } } diff --git a/tests/baselines/reference/destructuringParameterProperties2.errors.txt b/tests/baselines/reference/destructuringParameterProperties2.errors.txt index 3b424f8ae978b..61c0e61611aa7 100644 --- a/tests/baselines/reference/destructuringParameterProperties2.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties2.errors.txt @@ -1,3 +1,4 @@ +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(2,36): error TS1187: A parameter property may not be a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. @@ -7,9 +8,11 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(1 tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(21,27): error TS2345: Argument of type '[number, undefined, string]' is not assignable to parameter of type '[number, string, boolean]'. -==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts (7 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts (8 errors) ==== class C1 { constructor(private k: number, private [a, b, c]: [number, string, boolean]) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1187: A parameter property may not be a binding pattern. if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { ~ !!! error TS2339: Property 'b' does not exist on type 'C1'. diff --git a/tests/baselines/reference/destructuringParameterProperties3.errors.txt b/tests/baselines/reference/destructuringParameterProperties3.errors.txt index 44c18d32cc1a7..73d7dab2a3897 100644 --- a/tests/baselines/reference/destructuringParameterProperties3.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties3.errors.txt @@ -1,3 +1,4 @@ +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(2,31): error TS1187: A parameter property may not be a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. @@ -6,9 +7,11 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(1 tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(17,21): error TS2339: Property 'c' does not exist on type 'C1'. -==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts (6 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts (7 errors) ==== class C1 { constructor(private k: T, private [a, b, c]: [T,U,V]) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1187: A parameter property may not be a binding pattern. if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { ~ !!! error TS2339: Property 'b' does not exist on type 'C1'. diff --git a/tests/baselines/reference/destructuringParameterProperties4.errors.txt b/tests/baselines/reference/destructuringParameterProperties4.errors.txt index 9d8fdb9d933a0..04f6f82b5df29 100644 --- a/tests/baselines/reference/destructuringParameterProperties4.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties4.errors.txt @@ -1,3 +1,4 @@ +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(3,31): error TS1187: A parameter property may not be a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(4,59): error TS2339: Property 'b' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(4,83): error TS2339: Property 'c' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(5,18): error TS2339: Property 'a' does not exist on type 'C1'. @@ -9,10 +10,12 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(2 tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(24,44): error TS2339: Property 'c' does not exist on type 'C2'. -==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts (9 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts (10 errors) ==== class C1 { constructor(private k: T, protected [a, b, c]: [T,U,V]) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1187: A parameter property may not be a binding pattern. if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { ~ !!! error TS2339: Property 'b' does not exist on type 'C1'. diff --git a/tests/baselines/reference/destructuringParameterProperties5.errors.txt b/tests/baselines/reference/destructuringParameterProperties5.errors.txt index 00839fff6623d..dca02a9a84e3f 100644 --- a/tests/baselines/reference/destructuringParameterProperties5.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties5.errors.txt @@ -1,3 +1,4 @@ +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,17): error TS1187: A parameter property may not be a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,27): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,31): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x2' and no string index signature. tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,35): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x3' and no string index signature. @@ -12,12 +13,14 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(1 Property 'x' is missing in type '{ x1: number; x2: string; x3: boolean; }'. -==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts (9 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts (10 errors) ==== type ObjType1 = { x: number; y: string; z: boolean } type TupleType1 = [ObjType1, number, string] class C1 { constructor(public [{ x1, x2, x3 }, y, z]: TupleType1) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1187: A parameter property may not be a binding pattern. ~~ !!! error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. ~~