diff --git a/tests/baselines/reference/declarationsAndAssignments.errors.txt b/tests/baselines/reference/declarationsAndAssignments.errors.txt index c9ae3b81f62..08db9a7a3f2 100644 --- a/tests/baselines/reference/declarationsAndAssignments.errors.txt +++ b/tests/baselines/reference/declarationsAndAssignments.errors.txt @@ -23,15 +23,9 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(106,5): Property 'x' is missing in type '{ y: false; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,6): error TS2322: Type 'string' is not assignable to type 'number'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): error TS2322: Type 'number' is not assignable to type 'string'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(158,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type 'number[]', but here has type '[number, number]'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(159,19): error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type 'number[]', but here has type '[number]'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(160,22): error TS2403: Subsequent variable declarations must have the same type. Variable 'a3' must be of type 'any[]', but here has type '[]'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(176,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'a1' must be of type '(string | boolean)[]', but here has type '[string, boolean]'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(177,19): error TS2403: Subsequent variable declarations must have the same type. Variable 'a2' must be of type 'boolean[]', but here has type '[boolean]'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(178,22): error TS2403: Subsequent variable declarations must have the same type. Variable 'a3' must be of type 'any[]', but here has type '[]'. -==== tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts (28 errors) ==== +==== tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts (22 errors) ==== function f0() { var [] = [1, "hello"]; var [x] = [1, "hello"]; @@ -229,49 +223,39 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(178,22): var x = ([a, b] = [1, 2]); } - function f20() { + function f20(v: [number, number, number]) { var x: number; var y: number; var z: number; - var a: number[]; - var a3: any[]; - var [...a] = [1, 2, 3]; - var [x, ...a] = [1, 2, 3]; - ~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type 'number[]', but here has type '[number, number]'. - var [x, y, ...a] = [1, 2, 3]; - ~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type 'number[]', but here has type '[number]'. - var [x, y, z, ...a3] = [1, 2, 3]; - ~~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a3' must be of type 'any[]', but here has type '[]'. - [...a] = [1, 2, 3]; - [x, ...a] = [1, 2, 3]; - [x, y, ...a] = [1, 2, 3]; - [x, y, z, ...a3] = [1, 2, 3]; + var a0: []; + var a1: [number]; + var a2: [number, number]; + var a3: [number, number, number]; + var [...a3] = v; + var [x, ...a2] = v; + var [x, y, ...a1] = v; + var [x, y, z, ...a0] = v; + [...a3] = v; + [x, ...a2] = v; + [x, y, ...a1] = v; + [x, y, z, ...a0] = v; } - function f21() { + function f21(v: [number, string, boolean]) { var x: number; var y: string; var z: boolean; - var a0: (number | string | boolean)[]; - var a1: (string | boolean)[]; - var a2: boolean[]; - var a3: any[]; - var [...a0] = [1, "hello", true]; - var [x, ...a1] = [1, "hello", true]; - ~~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a1' must be of type '(string | boolean)[]', but here has type '[string, boolean]'. - var [x, y, ...a2] = [1, "hello", true]; - ~~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a2' must be of type 'boolean[]', but here has type '[boolean]'. - var [x, y, z, ...a3] = [1, "hello", true]; - ~~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a3' must be of type 'any[]', but here has type '[]'. - [...a0] = [1, "hello", true]; - [x, ...a1] = [1, "hello", true]; - [x, y, ...a2] = [1, "hello", true]; - [x, y, z, ...a3] = [1, "hello", true]; + var a0: [number, string, boolean]; + var a1: [string, boolean]; + var a2: [boolean]; + var a3: []; + var [...a0] = v; + var [x, ...a1] = v; + var [x, y, ...a2] = v; + var [x, y, z, ...a3] = v; + [...a0] = v; + [x, ...a1] = v; + [x, y, ...a2] = v; + [x, y, z, ...a3] = v; } \ No newline at end of file diff --git a/tests/baselines/reference/declarationsAndAssignments.js b/tests/baselines/reference/declarationsAndAssignments.js index b4bba241289..f092d0c1f92 100644 --- a/tests/baselines/reference/declarationsAndAssignments.js +++ b/tests/baselines/reference/declarationsAndAssignments.js @@ -149,38 +149,40 @@ function f19() { var x = ([a, b] = [1, 2]); } -function f20() { +function f20(v: [number, number, number]) { var x: number; var y: number; var z: number; - var a: number[]; - var a3: any[]; - var [...a] = [1, 2, 3]; - var [x, ...a] = [1, 2, 3]; - var [x, y, ...a] = [1, 2, 3]; - var [x, y, z, ...a3] = [1, 2, 3]; - [...a] = [1, 2, 3]; - [x, ...a] = [1, 2, 3]; - [x, y, ...a] = [1, 2, 3]; - [x, y, z, ...a3] = [1, 2, 3]; + var a0: []; + var a1: [number]; + var a2: [number, number]; + var a3: [number, number, number]; + var [...a3] = v; + var [x, ...a2] = v; + var [x, y, ...a1] = v; + var [x, y, z, ...a0] = v; + [...a3] = v; + [x, ...a2] = v; + [x, y, ...a1] = v; + [x, y, z, ...a0] = v; } -function f21() { +function f21(v: [number, string, boolean]) { var x: number; var y: string; var z: boolean; - var a0: (number | string | boolean)[]; - var a1: (string | boolean)[]; - var a2: boolean[]; - var a3: any[]; - var [...a0] = [1, "hello", true]; - var [x, ...a1] = [1, "hello", true]; - var [x, y, ...a2] = [1, "hello", true]; - var [x, y, z, ...a3] = [1, "hello", true]; - [...a0] = [1, "hello", true]; - [x, ...a1] = [1, "hello", true]; - [x, y, ...a2] = [1, "hello", true]; - [x, y, z, ...a3] = [1, "hello", true]; + var a0: [number, string, boolean]; + var a1: [string, boolean]; + var a2: [boolean]; + var a3: []; + var [...a0] = v; + var [x, ...a1] = v; + var [x, y, ...a2] = v; + var [x, y, z, ...a3] = v; + [...a0] = v; + [x, ...a1] = v; + [x, y, ...a2] = v; + [x, y, z, ...a3] = v; } @@ -320,24 +322,7 @@ function f19() { _d = [[2, 3]][0], _e = _d === void 0 ? [1, 2] : _d, a = _e[0], b = _e[1]; var x = (_f = [1, 2], a = _f[0], b = _f[1], _f); } -function f20() { - var _a, _b, _c; - var x; - var y; - var z; - var a; - var a3; - var a = [1, 2, 3].slice(0); - var _d = [1, 2, 3], x = _d[0], a = _d.slice(1); - var _e = [1, 2, 3], x = _e[0], y = _e[1], a = _e.slice(2); - var _f = [1, 2, 3], x = _f[0], y = _f[1], z = _f[2], a3 = _f.slice(3); - a = [1, 2, 3].slice(0); - _a = [1, 2, 3], x = _a[0], a = _a.slice(1); - _b = [1, 2, 3], x = _b[0], y = _b[1], a = _b.slice(2); - _c = [1, 2, 3], x = _c[0], y = _c[1], z = _c[2], a3 = _c.slice(3); -} -function f21() { - var _a, _b, _c; +function f20(v) { var x; var y; var z; @@ -345,12 +330,29 @@ function f21() { var a1; var a2; var a3; - var a0 = [1, "hello", true].slice(0); - var _d = [1, "hello", true], x = _d[0], a1 = _d.slice(1); - var _e = [1, "hello", true], x = _e[0], y = _e[1], a2 = _e.slice(2); - var _f = [1, "hello", true], x = _f[0], y = _f[1], z = _f[2], a3 = _f.slice(3); - a0 = [1, "hello", true].slice(0); - _a = [1, "hello", true], x = _a[0], a1 = _a.slice(1); - _b = [1, "hello", true], x = _b[0], y = _b[1], a2 = _b.slice(2); - _c = [1, "hello", true], x = _c[0], y = _c[1], z = _c[2], a3 = _c.slice(3); + var a3 = v.slice(0); + var x = v[0], a2 = v.slice(1); + var x = v[0], y = v[1], a1 = v.slice(2); + var x = v[0], y = v[1], z = v[2], a0 = v.slice(3); + a3 = v.slice(0); + x = v[0], a2 = v.slice(1); + x = v[0], y = v[1], a1 = v.slice(2); + x = v[0], y = v[1], z = v[2], a0 = v.slice(3); +} +function f21(v) { + var x; + var y; + var z; + var a0; + var a1; + var a2; + var a3; + var a0 = v.slice(0); + var x = v[0], a1 = v.slice(1); + var x = v[0], y = v[1], a2 = v.slice(2); + var x = v[0], y = v[1], z = v[2], a3 = v.slice(3); + a0 = v.slice(0); + x = v[0], a1 = v.slice(1); + x = v[0], y = v[1], a2 = v.slice(2); + x = v[0], y = v[1], z = v[2], a3 = v.slice(3); } diff --git a/tests/baselines/reference/declarationsAndAssignments.symbols b/tests/baselines/reference/declarationsAndAssignments.symbols index 900d255345c..e5971d121f1 100644 --- a/tests/baselines/reference/declarationsAndAssignments.symbols +++ b/tests/baselines/reference/declarationsAndAssignments.symbols @@ -471,119 +471,143 @@ function f19() { >b : Symbol(b, Decl(declarationsAndAssignments.ts, 142, 10)) } -function f20() { +function f20(v: [number, number, number]) { >f20 : Symbol(f20, Decl(declarationsAndAssignments.ts, 148, 1)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) var x: number; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9)) +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 159, 9), Decl(declarationsAndAssignments.ts, 160, 9), Decl(declarationsAndAssignments.ts, 161, 9)) var y: number; ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 160, 11), Decl(declarationsAndAssignments.ts, 161, 11)) var z: number; ->z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 159, 14)) +>z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 161, 14)) - var a: number[]; ->a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14)) + var a0: []; +>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 161, 17)) - var a3: any[]; ->a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 159, 17)) + var a1: [number]; +>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 160, 14)) - var [...a] = [1, 2, 3]; ->a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14)) + var a2: [number, number]; +>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 156, 7), Decl(declarationsAndAssignments.ts, 159, 11)) - var [x, ...a] = [1, 2, 3]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9)) ->a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14)) + var a3: [number, number, number]; +>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 157, 7), Decl(declarationsAndAssignments.ts, 158, 9)) - var [x, y, ...a] = [1, 2, 3]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11)) ->a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14)) + var [...a3] = v; +>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 157, 7), Decl(declarationsAndAssignments.ts, 158, 9)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) - var [x, y, z, ...a3] = [1, 2, 3]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11)) ->z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 159, 14)) ->a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 159, 17)) + var [x, ...a2] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 159, 9), Decl(declarationsAndAssignments.ts, 160, 9), Decl(declarationsAndAssignments.ts, 161, 9)) +>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 156, 7), Decl(declarationsAndAssignments.ts, 159, 11)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) - [...a] = [1, 2, 3]; ->a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14)) + var [x, y, ...a1] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 159, 9), Decl(declarationsAndAssignments.ts, 160, 9), Decl(declarationsAndAssignments.ts, 161, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 160, 11), Decl(declarationsAndAssignments.ts, 161, 11)) +>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 160, 14)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) - [x, ...a] = [1, 2, 3]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9)) ->a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14)) + var [x, y, z, ...a0] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 159, 9), Decl(declarationsAndAssignments.ts, 160, 9), Decl(declarationsAndAssignments.ts, 161, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 160, 11), Decl(declarationsAndAssignments.ts, 161, 11)) +>z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 161, 14)) +>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 161, 17)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) - [x, y, ...a] = [1, 2, 3]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11)) ->a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14)) + [...a3] = v; +>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 157, 7), Decl(declarationsAndAssignments.ts, 158, 9)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) - [x, y, z, ...a3] = [1, 2, 3]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11)) ->z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 159, 14)) ->a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 159, 17)) + [x, ...a2] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 159, 9), Decl(declarationsAndAssignments.ts, 160, 9), Decl(declarationsAndAssignments.ts, 161, 9)) +>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 156, 7), Decl(declarationsAndAssignments.ts, 159, 11)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) + + [x, y, ...a1] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 159, 9), Decl(declarationsAndAssignments.ts, 160, 9), Decl(declarationsAndAssignments.ts, 161, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 160, 11), Decl(declarationsAndAssignments.ts, 161, 11)) +>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 160, 14)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) + + [x, y, z, ...a0] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 159, 9), Decl(declarationsAndAssignments.ts, 160, 9), Decl(declarationsAndAssignments.ts, 161, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 160, 11), Decl(declarationsAndAssignments.ts, 161, 11)) +>z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 161, 14)) +>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 161, 17)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 150, 13)) } -function f21() { ->f21 : Symbol(f21, Decl(declarationsAndAssignments.ts, 164, 1)) +function f21(v: [number, string, boolean]) { +>f21 : Symbol(f21, Decl(declarationsAndAssignments.ts, 166, 1)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) var x: number; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9)) +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 9), Decl(declarationsAndAssignments.ts, 178, 9), Decl(declarationsAndAssignments.ts, 179, 9)) var y: string; ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 178, 11), Decl(declarationsAndAssignments.ts, 179, 11)) var z: boolean; ->z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 14)) +>z : Symbol(z, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 179, 14)) - var a0: (number | string | boolean)[]; ->a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 174, 9)) + var a0: [number, string, boolean]; +>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 9)) - var a1: (string | boolean)[]; ->a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 175, 11)) + var a1: [string, boolean]; +>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 11)) - var a2: boolean[]; ->a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 14)) + var a2: [boolean]; +>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 174, 7), Decl(declarationsAndAssignments.ts, 178, 14)) - var a3: any[]; ->a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 17)) + var a3: []; +>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 175, 7), Decl(declarationsAndAssignments.ts, 179, 17)) - var [...a0] = [1, "hello", true]; ->a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 174, 9)) + var [...a0] = v; +>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 9)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) - var [x, ...a1] = [1, "hello", true]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9)) ->a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 175, 11)) + var [x, ...a1] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 9), Decl(declarationsAndAssignments.ts, 178, 9), Decl(declarationsAndAssignments.ts, 179, 9)) +>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 11)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) - var [x, y, ...a2] = [1, "hello", true]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11)) ->a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 14)) + var [x, y, ...a2] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 9), Decl(declarationsAndAssignments.ts, 178, 9), Decl(declarationsAndAssignments.ts, 179, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 178, 11), Decl(declarationsAndAssignments.ts, 179, 11)) +>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 174, 7), Decl(declarationsAndAssignments.ts, 178, 14)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) - var [x, y, z, ...a3] = [1, "hello", true]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11)) ->z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 14)) ->a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 17)) + var [x, y, z, ...a3] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 9), Decl(declarationsAndAssignments.ts, 178, 9), Decl(declarationsAndAssignments.ts, 179, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 178, 11), Decl(declarationsAndAssignments.ts, 179, 11)) +>z : Symbol(z, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 179, 14)) +>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 175, 7), Decl(declarationsAndAssignments.ts, 179, 17)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) - [...a0] = [1, "hello", true]; ->a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 174, 9)) + [...a0] = v; +>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 9)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) - [x, ...a1] = [1, "hello", true]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9)) ->a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 175, 11)) + [x, ...a1] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 9), Decl(declarationsAndAssignments.ts, 178, 9), Decl(declarationsAndAssignments.ts, 179, 9)) +>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 11)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) - [x, y, ...a2] = [1, "hello", true]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11)) ->a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 14)) + [x, y, ...a2] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 9), Decl(declarationsAndAssignments.ts, 178, 9), Decl(declarationsAndAssignments.ts, 179, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 178, 11), Decl(declarationsAndAssignments.ts, 179, 11)) +>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 174, 7), Decl(declarationsAndAssignments.ts, 178, 14)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) - [x, y, z, ...a3] = [1, "hello", true]; ->x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9)) ->y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11)) ->z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 14)) ->a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 17)) + [x, y, z, ...a3] = v; +>x : Symbol(x, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 9), Decl(declarationsAndAssignments.ts, 178, 9), Decl(declarationsAndAssignments.ts, 179, 9)) +>y : Symbol(y, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 178, 11), Decl(declarationsAndAssignments.ts, 179, 11)) +>z : Symbol(z, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 179, 14)) +>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 175, 7), Decl(declarationsAndAssignments.ts, 179, 17)) +>v : Symbol(v, Decl(declarationsAndAssignments.ts, 168, 13)) } diff --git a/tests/baselines/reference/declarationsAndAssignments.types b/tests/baselines/reference/declarationsAndAssignments.types index 602ffbd76eb..e7db6f84fdb 100644 --- a/tests/baselines/reference/declarationsAndAssignments.types +++ b/tests/baselines/reference/declarationsAndAssignments.types @@ -678,8 +678,9 @@ function f19() { >2 : 2 } -function f20() { ->f20 : () => void +function f20(v: [number, number, number]) { +>f20 : (v: [number, number, number]) => void +>v : [number, number, number] var x: number; >x : number @@ -690,95 +691,78 @@ function f20() { var z: number; >z : number - var a: number[]; ->a : number[] + var a0: []; +>a0 : [] - var a3: any[]; ->a3 : any[] + var a1: [number]; +>a1 : [number] - var [...a] = [1, 2, 3]; ->a : number[] ->[1, 2, 3] : number[] ->1 : 1 ->2 : 2 ->3 : 3 + var a2: [number, number]; +>a2 : [number, number] - var [x, ...a] = [1, 2, 3]; + var a3: [number, number, number]; +>a3 : [number, number, number] + + var [...a3] = v; +>a3 : [number, number, number] +>v : [number, number, number] + + var [x, ...a2] = v; >x : number ->a : number[] ->[1, 2, 3] : [number, number, number] ->1 : 1 ->2 : 2 ->3 : 3 +>a2 : [number, number] +>v : [number, number, number] - var [x, y, ...a] = [1, 2, 3]; + var [x, y, ...a1] = v; >x : number >y : number ->a : number[] ->[1, 2, 3] : [number, number, number] ->1 : 1 ->2 : 2 ->3 : 3 +>a1 : [number] +>v : [number, number, number] - var [x, y, z, ...a3] = [1, 2, 3]; + var [x, y, z, ...a0] = v; >x : number >y : number >z : number ->a3 : any[] ->[1, 2, 3] : [number, number, number] ->1 : 1 ->2 : 2 ->3 : 3 +>a0 : [] +>v : [number, number, number] - [...a] = [1, 2, 3]; ->[...a] = [1, 2, 3] : number[] ->[...a] : number[] ->...a : number ->a : number[] ->[1, 2, 3] : number[] ->1 : 1 ->2 : 2 ->3 : 3 + [...a3] = v; +>[...a3] = v : [number, number, number] +>[...a3] : number[] +>...a3 : number +>a3 : [number, number, number] +>v : [number, number, number] - [x, ...a] = [1, 2, 3]; ->[x, ...a] = [1, 2, 3] : [number, number, number] ->[x, ...a] : [number, ...number[]] + [x, ...a2] = v; +>[x, ...a2] = v : [number, number, number] +>[x, ...a2] : [number, ...number[]] >x : number ->...a : number ->a : number[] ->[1, 2, 3] : [number, number, number] ->1 : 1 ->2 : 2 ->3 : 3 +>...a2 : number +>a2 : [number, number] +>v : [number, number, number] - [x, y, ...a] = [1, 2, 3]; ->[x, y, ...a] = [1, 2, 3] : [number, number, number] ->[x, y, ...a] : [number, number, ...number[]] + [x, y, ...a1] = v; +>[x, y, ...a1] = v : [number, number, number] +>[x, y, ...a1] : [number, number, ...number[]] >x : number >y : number ->...a : number ->a : number[] ->[1, 2, 3] : [number, number, number] ->1 : 1 ->2 : 2 ->3 : 3 +>...a1 : number +>a1 : [number] +>v : [number, number, number] - [x, y, z, ...a3] = [1, 2, 3]; ->[x, y, z, ...a3] = [1, 2, 3] : [number, number, number] ->[x, y, z, ...a3] : [number, number, number, ...any[]] + [x, y, z, ...a0] = v; +>[x, y, z, ...a0] = v : [number, number, number] +>[x, y, z, ...a0] : [number, number, number, ...never[]] >x : number >y : number >z : number ->...a3 : any ->a3 : any[] ->[1, 2, 3] : [number, number, number] ->1 : 1 ->2 : 2 ->3 : 3 +>...a0 : never +>a0 : [] +>v : [number, number, number] } -function f21() { ->f21 : () => void +function f21(v: [number, string, boolean]) { +>f21 : (v: [number, string, boolean]) => void +>v : [number, string, boolean] var x: number; >x : number @@ -789,96 +773,72 @@ function f21() { var z: boolean; >z : boolean - var a0: (number | string | boolean)[]; ->a0 : (string | number | boolean)[] + var a0: [number, string, boolean]; +>a0 : [number, string, boolean] - var a1: (string | boolean)[]; ->a1 : (string | boolean)[] + var a1: [string, boolean]; +>a1 : [string, boolean] - var a2: boolean[]; ->a2 : boolean[] + var a2: [boolean]; +>a2 : [boolean] - var a3: any[]; ->a3 : any[] + var a3: []; +>a3 : [] - var [...a0] = [1, "hello", true]; ->a0 : (string | number | boolean)[] ->[1, "hello", true] : (string | number | boolean)[] ->1 : 1 ->"hello" : "hello" ->true : true + var [...a0] = v; +>a0 : [number, string, boolean] +>v : [number, string, boolean] - var [x, ...a1] = [1, "hello", true]; + var [x, ...a1] = v; >x : number ->a1 : (string | boolean)[] ->[1, "hello", true] : [number, string, boolean] ->1 : 1 ->"hello" : "hello" ->true : true +>a1 : [string, boolean] +>v : [number, string, boolean] - var [x, y, ...a2] = [1, "hello", true]; + var [x, y, ...a2] = v; >x : number >y : string ->a2 : boolean[] ->[1, "hello", true] : [number, string, boolean] ->1 : 1 ->"hello" : "hello" ->true : true +>a2 : [boolean] +>v : [number, string, boolean] - var [x, y, z, ...a3] = [1, "hello", true]; + var [x, y, z, ...a3] = v; >x : number >y : string >z : boolean ->a3 : any[] ->[1, "hello", true] : [number, string, boolean] ->1 : 1 ->"hello" : "hello" ->true : true +>a3 : [] +>v : [number, string, boolean] - [...a0] = [1, "hello", true]; ->[...a0] = [1, "hello", true] : (string | number | true)[] + [...a0] = v; +>[...a0] = v : [number, string, boolean] >[...a0] : (string | number | boolean)[] >...a0 : string | number | boolean ->a0 : (string | number | boolean)[] ->[1, "hello", true] : (string | number | true)[] ->1 : 1 ->"hello" : "hello" ->true : true +>a0 : [number, string, boolean] +>v : [number, string, boolean] - [x, ...a1] = [1, "hello", true]; ->[x, ...a1] = [1, "hello", true] : [number, string, true] + [x, ...a1] = v; +>[x, ...a1] = v : [number, string, boolean] >[x, ...a1] : [number, ...(string | boolean)[]] >x : number >...a1 : string | boolean ->a1 : (string | boolean)[] ->[1, "hello", true] : [number, string, true] ->1 : 1 ->"hello" : "hello" ->true : true +>a1 : [string, boolean] +>v : [number, string, boolean] - [x, y, ...a2] = [1, "hello", true]; ->[x, y, ...a2] = [1, "hello", true] : [number, string, true] + [x, y, ...a2] = v; +>[x, y, ...a2] = v : [number, string, boolean] >[x, y, ...a2] : [number, string, ...boolean[]] >x : number >y : string >...a2 : boolean ->a2 : boolean[] ->[1, "hello", true] : [number, string, true] ->1 : 1 ->"hello" : "hello" ->true : true +>a2 : [boolean] +>v : [number, string, boolean] - [x, y, z, ...a3] = [1, "hello", true]; ->[x, y, z, ...a3] = [1, "hello", true] : [number, string, true] ->[x, y, z, ...a3] : [number, string, boolean, ...any[]] + [x, y, z, ...a3] = v; +>[x, y, z, ...a3] = v : [number, string, boolean] +>[x, y, z, ...a3] : [number, string, boolean, ...never[]] >x : number >y : string >z : boolean ->...a3 : any ->a3 : any[] ->[1, "hello", true] : [number, string, true] ->1 : 1 ->"hello" : "hello" ->true : true +>...a3 : never +>a3 : [] +>v : [number, string, boolean] } diff --git a/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts b/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts index e45df9c45df..7ab33f99a1e 100644 --- a/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts +++ b/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts @@ -148,36 +148,38 @@ function f19() { var x = ([a, b] = [1, 2]); } -function f20() { +function f20(v: [number, number, number]) { var x: number; var y: number; var z: number; - var a: number[]; - var a3: any[]; - var [...a] = [1, 2, 3]; - var [x, ...a] = [1, 2, 3]; - var [x, y, ...a] = [1, 2, 3]; - var [x, y, z, ...a3] = [1, 2, 3]; - [...a] = [1, 2, 3]; - [x, ...a] = [1, 2, 3]; - [x, y, ...a] = [1, 2, 3]; - [x, y, z, ...a3] = [1, 2, 3]; + var a0: []; + var a1: [number]; + var a2: [number, number]; + var a3: [number, number, number]; + var [...a3] = v; + var [x, ...a2] = v; + var [x, y, ...a1] = v; + var [x, y, z, ...a0] = v; + [...a3] = v; + [x, ...a2] = v; + [x, y, ...a1] = v; + [x, y, z, ...a0] = v; } -function f21() { +function f21(v: [number, string, boolean]) { var x: number; var y: string; var z: boolean; - var a0: (number | string | boolean)[]; - var a1: (string | boolean)[]; - var a2: boolean[]; - var a3: any[]; - var [...a0] = [1, "hello", true]; - var [x, ...a1] = [1, "hello", true]; - var [x, y, ...a2] = [1, "hello", true]; - var [x, y, z, ...a3] = [1, "hello", true]; - [...a0] = [1, "hello", true]; - [x, ...a1] = [1, "hello", true]; - [x, y, ...a2] = [1, "hello", true]; - [x, y, z, ...a3] = [1, "hello", true]; + var a0: [number, string, boolean]; + var a1: [string, boolean]; + var a2: [boolean]; + var a3: []; + var [...a0] = v; + var [x, ...a1] = v; + var [x, y, ...a2] = v; + var [x, y, z, ...a3] = v; + [...a0] = v; + [x, ...a1] = v; + [x, y, ...a2] = v; + [x, y, z, ...a3] = v; }