From d475170321b3c0c77d33f0766e1af9ec2e7451fa Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 13 Apr 2015 16:16:04 -0700 Subject: [PATCH 1/3] Conformance test for update in section 4.6 --- .../reference/arrayLiterals2.errors.txt | 60 ++++++++++++++++ tests/baselines/reference/arrayLiterals2.js | 60 ++++++++++++++++ .../reference/arrayLiterals2ES6.errors.txt | 60 ++++++++++++++++ .../baselines/reference/arrayLiterals2ES6.js | 60 ++++++++++++++++ .../reference/arrayLiterals3.errors.txt | 62 ++++++++++++++++ tests/baselines/reference/arrayLiterals3.js | 70 +++++++++++++++++++ .../reference/arrayLiterals3ES6.errors.txt | 52 ++++++++++++++ .../baselines/reference/arrayLiterals3ES6.js | 62 ++++++++++++++++ .../reference/arrayLiterals4.errors.txt | 31 ++++++++ tests/baselines/reference/arrayLiterals4.js | 16 +++++ .../reference/arrayLiterals5.errors.txt | 46 ++++++++++++ tests/baselines/reference/arrayLiterals5.js | 19 +++++ .../arrayLiterals/arrayLiterals2.ts | 32 +++++++++ .../arrayLiterals/arrayLiterals2ES6.ts | 33 +++++++++ .../arrayLiterals/arrayLiterals3.ts | 42 +++++++++++ .../arrayLiterals/arrayLiterals3ES6.ts | 39 +++++++++++ .../arrayLiterals/arrayLiterals4.ts | 6 ++ .../arrayLiterals/arrayLiterals5.ts | 3 + 18 files changed, 753 insertions(+) create mode 100644 tests/baselines/reference/arrayLiterals2.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals2.js create mode 100644 tests/baselines/reference/arrayLiterals2ES6.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals2ES6.js create mode 100644 tests/baselines/reference/arrayLiterals3.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals3.js create mode 100644 tests/baselines/reference/arrayLiterals3ES6.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals3ES6.js create mode 100644 tests/baselines/reference/arrayLiterals4.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals4.js create mode 100644 tests/baselines/reference/arrayLiterals5.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals5.js create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts diff --git a/tests/baselines/reference/arrayLiterals2.errors.txt b/tests/baselines/reference/arrayLiterals2.errors.txt new file mode 100644 index 0000000000000..149d9a4747cca --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2.errors.txt @@ -0,0 +1,60 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(23,5): error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. + Property '0' is missing in type '(string[] | number[])[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(24,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. + Property '0' is missing in type 'number[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(27,5): error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. + Types of property 'push' are incompatible. + Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. + Types of parameters 'items' and 'items' are incompatible. + Type 'string | number' is not assignable to type 'Number'. + Type 'string' is not assignable to type 'Number'. + Property 'toFixed' is missing in type 'String'. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts (3 errors) ==== + var a = [2,3,4] + var a1 = ["hello", "world"] + var a2 = [undefined, null, undefined]; + var a3 = [] + var a4: number[] = [...a3]; + var a5: number[] = []; + + var b = [, , , ...a,"hello"]; + var c = [() => 1,]; + var d = [...c,,]; + var e = [,,...d]; + var g = [[1, 2, "hello"], ["string", true]]; + var h = [...g]; + var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; + var j = [...i]; + var k:Array = [...i]; + interface tup { + 0: number[]|string[]; + 1: number[]|string[]; + } + interface myArray extends Array {} + interface myArray2 extends Array {} + var l: tup = [...i]; // error + ~ +!!! error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. +!!! error TS2322: Property '0' is missing in type '(string[] | number[])[]'. + var m: [number, number, number] = [...a]; // error + ~ +!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. +!!! error TS2322: Property '0' is missing in type 'number[]'. + var n: number[] = [...a]; + var o: myArray = [...a]; + var p: myArray = [...a, ...a1]; // error + ~ +!!! error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. +!!! error TS2322: Types of property 'push' are incompatible. +!!! error TS2322: Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. +!!! error TS2322: Types of parameters 'items' and 'items' are incompatible. +!!! error TS2322: Type 'string | number' is not assignable to type 'Number'. +!!! error TS2322: Type 'string' is not assignable to type 'Number'. +!!! error TS2322: Property 'toFixed' is missing in type 'String'. + var q: myArray2 = [...a, ...a1]; + var r = [...a2]; + var r1 = [...a3]; + var r2 = [...a4]; + var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals2.js b/tests/baselines/reference/arrayLiterals2.js new file mode 100644 index 0000000000000..42cfb13c96ac4 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2.js @@ -0,0 +1,60 @@ +//// [arrayLiterals2.ts] +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; + +//// [arrayLiterals2.js] +var a = [2, 3, 4]; +var a1 = ["hello", "world"]; +var a2 = [undefined, null, undefined]; +var a3 = []; +var a4 = a3; +var a5 = []; +var b = [, , ].concat(a, ["hello"]); +var c = [function () { return 1; },]; +var d = c.concat([,]); +var e = [, ].concat(d); +var g = [[1, 2, "hello"], ["string", true]]; +var h = g; +var i = [[1, 2, 3], ["hello", "string"]]; +var j = i; +var k = i; +var l = i; // error +var m = a; // error +var n = a; +var o = a; +var p = a.concat(a1); // error +var q = a.concat(a1); +var r = a2; +var r1 = a3; +var r2 = a4; +var r3 = [a4]; diff --git a/tests/baselines/reference/arrayLiterals2ES6.errors.txt b/tests/baselines/reference/arrayLiterals2ES6.errors.txt new file mode 100644 index 0000000000000..bb3247ec45304 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES6.errors.txt @@ -0,0 +1,60 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(23,5): error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. + Property '0' is missing in type '(string[] | number[])[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(24,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. + Property '0' is missing in type 'number[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(27,5): error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. + Types of property 'push' are incompatible. + Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. + Types of parameters 'items' and 'items' are incompatible. + Type 'string | number' is not assignable to type 'Number'. + Type 'string' is not assignable to type 'Number'. + Property 'toFixed' is missing in type 'String'. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts (3 errors) ==== + var a = [2,3,4] + var a1 = ["hello", "world"] + var a2 = [undefined, null, undefined]; + var a3 = [] + var a4: number[] = [...a3]; + var a5: number[] = []; + + var b = [, , , ...a,"hello"]; + var c = [() => 1,]; + var d = [...c,,]; + var e = [,,...d]; + var g = [[1, 2, "hello"], ["string", true]]; + var h = [...g]; + var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; + var j = [...i]; + var k:Array = [...i]; + interface tup { + 0: number[]|string[]; + 1: number[]|string[]; + } + interface myArray extends Array {} + interface myArray2 extends Array {} + var l: tup = [...i]; // error + ~ +!!! error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. +!!! error TS2322: Property '0' is missing in type '(string[] | number[])[]'. + var m: [number, number, number] = [...a]; // error + ~ +!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. +!!! error TS2322: Property '0' is missing in type 'number[]'. + var n: number[] = [...a]; + var o: myArray = [...a]; + var p: myArray = [...a, ...a1]; // error + ~ +!!! error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. +!!! error TS2322: Types of property 'push' are incompatible. +!!! error TS2322: Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. +!!! error TS2322: Types of parameters 'items' and 'items' are incompatible. +!!! error TS2322: Type 'string | number' is not assignable to type 'Number'. +!!! error TS2322: Type 'string' is not assignable to type 'Number'. +!!! error TS2322: Property 'toFixed' is missing in type 'String'. + var q: myArray2 = [...a, ...a1]; + var r = [...a2]; + var r1 = [...a3]; + var r2 = [...a4]; + var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals2ES6.js b/tests/baselines/reference/arrayLiterals2ES6.js new file mode 100644 index 0000000000000..8cdecdd3be468 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES6.js @@ -0,0 +1,60 @@ +//// [arrayLiterals2ES6.ts] +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; + +//// [arrayLiterals2ES6.js] +var a = [2, 3, 4]; +var a1 = ["hello", "world"]; +var a2 = [undefined, null, undefined]; +var a3 = []; +var a4 = [...a3]; +var a5 = []; +var b = [, , , ...a, "hello"]; +var c = [() => 1,]; +var d = [...c, ,]; +var e = [, , ...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i = [[1, 2, 3], ["hello", "string"]]; +var j = [...i]; +var k = [...i]; +var l = [...i]; // error +var m = [...a]; // error +var n = [...a]; +var o = [...a]; +var p = [...a, ...a1]; // error +var q = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3 = [[...a4]]; diff --git a/tests/baselines/reference/arrayLiterals3.errors.txt b/tests/baselines/reference/arrayLiterals3.errors.txt new file mode 100644 index 0000000000000..35bedb5485416 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3.errors.txt @@ -0,0 +1,62 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(8,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. + Types of property 'pop' are incompatible. + Type '() => string | number | boolean' is not assignable to type '() => number'. + Type 'string | number | boolean' is not assignable to type 'number'. + Type 'string' is not assignable to type 'number'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(35,6): error TS2461: Type 'string | number[]' is not an array type. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(40,16): error TS2461: Type 'IArguments' is not an array type. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts (3 errors) ==== + interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; + } + var [a, b]: [number, number] = [1, 2]; + var [a1, b1]: [number, number] = [1, 2, "string", true]; // error + ~~~~~~~~ +!!! error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. +!!! error TS2322: Types of property 'pop' are incompatible. +!!! error TS2322: Type '() => string | number | boolean' is not assignable to type '() => number'. +!!! error TS2322: Type 'string | number | boolean' is not assignable to type 'number'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; + var [c1, c2, c3]: I0 = [10, 11, "string", true]; + interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; + } + interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; + } + var tup: [number, number, string] = [1, 2, "world"]; + var [c, d, e]: I = tup; + var [f, g]: I2 = tup; + var h1: string| number; + var [f1, g1,h1]: I2 = tup; + h1 = g1; + + var arr1 = [1, 2, 3]; + var arr2 = [true, false, true]; + var arr3 = [true] + var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; + var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; + var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; + var [[r, s], t] = [[...arr1], "hello"]; + var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error + ~~~~~~~~ +!!! error TS2461: Type 'string | number[]' is not an array type. + var [x] = [...["word"]]; + var [...y] = [...["word"]]; + var z = [...[...["word"]]]; + function foobar() { + return [...arguments]; + ~~~~~~~~~ +!!! error TS2461: Type 'IArguments' is not an array type. + } + var [...as] = [[, , , , ]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals3.js b/tests/baselines/reference/arrayLiterals3.js new file mode 100644 index 0000000000000..6ad064e20dac6 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3.js @@ -0,0 +1,70 @@ +//// [arrayLiterals3.ts] +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; +function foobar() { + return [...arguments]; +} +var [...as] = [[, , , , ]]; + +//// [arrayLiterals3.js] +var _a = [1, 2], a = _a[0], b = _a[1]; +var _b = [1, 2, "string", true], a1 = _b[0], b1 = _b[1]; // error +var _c = [1, 2, 3, "string"], a2 = _c[0], b2 = _c[1]; +var _d = [10, 11, "string", true], c1 = _d[0], c2 = _d[1], c3 = _d[2]; +var tup = [1, 2, "world"]; +var c = tup[0], d = tup[1], e = tup[2]; +var f = tup[0], g = tup[1]; +var h1; +var f1 = tup[0], g1 = tup[1], h1 = tup[2]; +h1 = g1; +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true]; +var _e = [arr1, arr2], _f = _e[0], foo1 = _f[0], foo2 = _f[1], foo3 = _f[2], _g = _e[1], boo1 = _g[0], boo2 = _g[1], boo3 = _g[2]; +var _h = arr1.concat(arr2), bar1 = _h[0], bar2 = _h[1], bar3 = _h[2], bar1 = _h[3], bar2 = _h[4], bar3 = _h[5]; +var _j = arr1.concat(arr3), bar1 = _j[0], bar2 = _j[1], bar3 = _j[2], bar1 = _j[3], bar2 = _j[4]; +var _k = [arr1, "hello"], _l = _k[0], r = _l[0], s = _l[1], t = _k[1]; +var _m = [arr1].concat(["hello"]), _o = _m[0], r1 = _o[0], s1 = _o[1], t1 = _m[1]; // error +var x = (["word"])[0]; +var _p = ["word"], y = _p.slice(0); +var z = ["word"]; +function foobar() { + return arguments; +} +var _q = [[, , , ,]], as = _q.slice(0); diff --git a/tests/baselines/reference/arrayLiterals3ES6.errors.txt b/tests/baselines/reference/arrayLiterals3ES6.errors.txt new file mode 100644 index 0000000000000..1490a0fbcfa86 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3ES6.errors.txt @@ -0,0 +1,52 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts(8,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. + Types of property 'pop' are incompatible. + Type '() => string | number | boolean' is not assignable to type '() => number'. + Type 'string | number | boolean' is not assignable to type 'number'. + Type 'string' is not assignable to type 'number'. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts (1 errors) ==== + interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; + } + var [a, b]: [number, number] = [1, 2]; + var [a1, b1]: [number, number] = [1, 2, "string", true]; // error + ~~~~~~~~ +!!! error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. +!!! error TS2322: Types of property 'pop' are incompatible. +!!! error TS2322: Type '() => string | number | boolean' is not assignable to type '() => number'. +!!! error TS2322: Type 'string | number | boolean' is not assignable to type 'number'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; + var [c1, c2, c3]: I0 = [10, 11, "string", true]; + interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; + } + interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; + } + var tup: [number, number, string] = [1, 2, "world"]; + var [c, d, e]: I = tup; + var [f, g]: I2 = tup; + var h1: string| number; + var [f1, g1,h1]: I2 = tup; + h1 = g1; + + var arr1 = [1, 2, 3]; + var arr2 = [true, false, true]; + var arr3 = [true] + var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; + var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; + var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; + var [[r, s], t] = [[...arr1], "hello"]; + var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error + var [x] = [...["word"]]; + var [...y] = [...["word"]]; + var z = [...[...["word"]]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals3ES6.js b/tests/baselines/reference/arrayLiterals3ES6.js new file mode 100644 index 0000000000000..f685ea9c7190f --- /dev/null +++ b/tests/baselines/reference/arrayLiterals3ES6.js @@ -0,0 +1,62 @@ +//// [arrayLiterals3ES6.ts] +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; + +//// [arrayLiterals3ES6.js] +var [a, b] = [1, 2]; +var [a1, b1] = [1, 2, "string", true]; // error +var [a2, b2] = [1, 2, 3, "string"]; +var [c1, c2, c3] = [10, 11, "string", true]; +var tup = [1, 2, "world"]; +var [c, d, e] = tup; +var [f, g] = tup; +var h1; +var [f1, g1, h1] = tup; +h1 = g1; +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true]; +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; diff --git a/tests/baselines/reference/arrayLiterals4.errors.txt b/tests/baselines/reference/arrayLiterals4.errors.txt new file mode 100644 index 0000000000000..5fc0fe2c51e72 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals4.errors.txt @@ -0,0 +1,31 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(2,6): error TS1212: Identifier expected. 'public' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(2,14): error TS1212: Identifier expected. 'static' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(3,5): error TS1212: Identifier expected. 'protected' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(4,21): error TS1212: Identifier expected. 'protected' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(5,7): error TS1212: Identifier expected. 'public' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(5,15): error TS1212: Identifier expected. 'package' is a reserved word in strict mode +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(6,9): error TS1212: Identifier expected. 'implements' is a reserved word in strict mode + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts (7 errors) ==== + "use strict" + var [public, static] = [1, 23, ]; + ~~~~~~ +!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode + ~~~~~~ +!!! error TS1212: Identifier expected. 'static' is a reserved word in strict mode + var protected = [1, 2, 3]; + ~~~~~~~~~ +!!! error TS1212: Identifier expected. 'protected' is a reserved word in strict mode + var [a, b, c] = [...protected]; + ~~~~~~~~~ +!!! error TS1212: Identifier expected. 'protected' is a reserved word in strict mode + var [[public, package]] = [[1, [2, 3]]]; + ~~~~~~ +!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode + ~~~~~~~ +!!! error TS1212: Identifier expected. 'package' is a reserved word in strict mode + var [...implements] = [[]]; + ~~~~~~~~~~ +!!! error TS1212: Identifier expected. 'implements' is a reserved word in strict mode + \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals4.js b/tests/baselines/reference/arrayLiterals4.js new file mode 100644 index 0000000000000..28c7fb1030669 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals4.js @@ -0,0 +1,16 @@ +//// [arrayLiterals4.ts] +"use strict" +var [public, static] = [1, 23, ]; +var protected = [1, 2, 3]; +var [a, b, c] = [...protected]; +var [[public, package]] = [[1, [2, 3]]]; +var [...implements] = [[]]; + + +//// [arrayLiterals4.js] +"use strict"; +var _a = [1, 23,], public = _a[0], static = _a[1]; +var protected = [1, 2, 3]; +var _b = protected, a = _b[0], b = _b[1], c = _b[2]; +var _c = ([[1, [2, 3]]])[0], public = _c[0], package = _c[1]; +var _d = [[]], implements = _d.slice(0); diff --git a/tests/baselines/reference/arrayLiterals5.errors.txt b/tests/baselines/reference/arrayLiterals5.errors.txt new file mode 100644 index 0000000000000..ee928841b6af0 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals5.errors.txt @@ -0,0 +1,46 @@ +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,6): error TS1181: Array element destructuring pattern expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,11): error TS1005: '(' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,13): error TS1109: Expression expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,16): error TS1005: '(' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,18): error TS1128: Declaration or statement expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,6): error TS1181: Array element destructuring pattern expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,9): error TS1005: '(' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,11): error TS2304: Cannot find name 'as'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,13): error TS1005: ';' expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,15): error TS1128: Declaration or statement expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,9): error TS1003: Identifier expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,14): error TS1003: Identifier expected. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,16): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts (13 errors) ==== + var [while, for] = [1, 3, ]; + ~~~~~ +!!! error TS1181: Array element destructuring pattern expected. + ~ +!!! error TS1005: '(' expected. + ~~~ +!!! error TS1109: Expression expected. + ~ +!!! error TS1005: '(' expected. + ~ +!!! error TS1128: Declaration or statement expected. + var [for, as] = [, , , , ]; + ~~~ +!!! error TS1181: Array element destructuring pattern expected. + ~ +!!! error TS1005: '(' expected. + ~~ +!!! error TS2304: Cannot find name 'as'. + ~ +!!! error TS1005: ';' expected. + ~ +!!! error TS1128: Declaration or statement expected. + var [...break] = [...["hello"]]; + ~~~~~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1128: Declaration or statement expected. + \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals5.js b/tests/baselines/reference/arrayLiterals5.js new file mode 100644 index 0000000000000..faf4bb6fa70a8 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals5.js @@ -0,0 +1,19 @@ +//// [arrayLiterals5.ts] +var [while, for] = [1, 3, ]; +var [for, as] = [, , , , ]; +var [...break] = [...["hello"]]; + + +//// [arrayLiterals5.js] +var _a = void 0; +while (, ) + for (; ; ) + ; +[1, 3,]; +var _b = void 0; +for (, as; ; ) + ; +[, , , ,]; +var _c = void 0, = _c.slice(0); +break ; +["hello"]; diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts new file mode 100644 index 0000000000000..6b6807e1d33c7 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts @@ -0,0 +1,32 @@ +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts new file mode 100644 index 0000000000000..5a32af531e196 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts @@ -0,0 +1,33 @@ +// @target:es6 +var a = [2,3,4] +var a1 = ["hello", "world"] +var a2 = [undefined, null, undefined]; +var a3 = [] +var a4: number[] = [...a3]; +var a5: number[] = []; + +var b = [, , , ...a,"hello"]; +var c = [() => 1,]; +var d = [...c,,]; +var e = [,,...d]; +var g = [[1, 2, "hello"], ["string", true]]; +var h = [...g]; +var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; +var j = [...i]; +var k:Array = [...i]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; +} +interface myArray extends Array {} +interface myArray2 extends Array {} +var l: tup = [...i]; // error +var m: [number, number, number] = [...a]; // error +var n: number[] = [...a]; +var o: myArray = [...a]; +var p: myArray = [...a, ...a1]; // error +var q: myArray2 = [...a, ...a1]; +var r = [...a2]; +var r1 = [...a3]; +var r2 = [...a4]; +var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts new file mode 100644 index 0000000000000..1a173d59d9229 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts @@ -0,0 +1,42 @@ +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; +function foobar() { + return [...arguments]; +} +var [...as] = [[, , , , ]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts new file mode 100644 index 0000000000000..817d27f0f92fe --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts @@ -0,0 +1,39 @@ +// @target:es6 +interface I0 extends Array { + 0: number; + 1: number; + 2: string; + 3: boolean; +} +var [a, b]: [number, number] = [1, 2]; +var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; +var [c1, c2, c3]: I0 = [10, 11, "string", true]; +interface I extends Array{ + 0: string|number; + 1: string|number; + 2: string|number; +} +interface I2 extends Array { + 0: number; + 1: number; + 2: string|number; +} +var tup: [number, number, string] = [1, 2, "world"]; +var [c, d, e]: I = tup; +var [f, g]: I2 = tup; +var h1: string| number; +var [f1, g1,h1]: I2 = tup; +h1 = g1; + +var arr1 = [1, 2, 3]; +var arr2 = [true, false, true]; +var arr3 = [true] +var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; +var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; +var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; +var [[r, s], t] = [[...arr1], "hello"]; +var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error +var [x] = [...["word"]]; +var [...y] = [...["word"]]; +var z = [...[...["word"]]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts new file mode 100644 index 0000000000000..28319903b7c49 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts @@ -0,0 +1,6 @@ +"use strict" +var [public, static] = [1, 23, ]; +var protected = [1, 2, 3]; +var [a, b, c] = [...protected]; +var [[public, package]] = [[1, [2, 3]]]; +var [...implements] = [[]]; diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts new file mode 100644 index 0000000000000..2429037b4a8a7 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts @@ -0,0 +1,3 @@ +var [while, for] = [1, 3, ]; +var [for, as] = [, , , , ]; +var [...break] = [...["hello"]]; From 845b618b42084585525b80be2c0266ddee007a1a Mon Sep 17 00:00:00 2001 From: Yui T Date: Thu, 16 Apr 2015 14:41:19 -0700 Subject: [PATCH 2/3] Add spec description to the test file and move tests that generate errors to separate file --- .../reference/arrayLiterals2.errors.txt | 60 ------ tests/baselines/reference/arrayLiterals2.js | 60 ------ .../baselines/reference/arrayLiterals2ES5.js | 104 ++++++++++ .../reference/arrayLiterals2ES5.types | 184 ++++++++++++++++++ .../reference/arrayLiterals2ES6.errors.txt | 60 ------ .../baselines/reference/arrayLiterals2ES6.js | 150 ++++++++------ .../reference/arrayLiterals2ES6.types | 172 ++++++++++++++++ .../reference/arrayLiterals3.errors.txt | 120 +++++++----- tests/baselines/reference/arrayLiterals3.js | 120 ++++++------ .../reference/arrayLiterals3ES6.errors.txt | 52 ----- .../baselines/reference/arrayLiterals3ES6.js | 62 ------ .../reference/arrayLiterals4.errors.txt | 31 --- tests/baselines/reference/arrayLiterals4.js | 16 -- .../reference/arrayLiterals5.errors.txt | 46 ----- tests/baselines/reference/arrayLiterals5.js | 19 -- .../arrayLiterals/arrayLiterals2.ts | 32 --- .../arrayLiterals/arrayLiterals2ES5.ts | 56 ++++++ .../arrayLiterals/arrayLiterals2ES6.ts | 84 +++++--- .../arrayLiterals/arrayLiterals3.ts | 72 +++---- .../arrayLiterals/arrayLiterals3ES6.ts | 39 ---- .../arrayLiterals/arrayLiterals4.ts | 6 - .../arrayLiterals/arrayLiterals5.ts | 3 - 22 files changed, 823 insertions(+), 725 deletions(-) delete mode 100644 tests/baselines/reference/arrayLiterals2.errors.txt delete mode 100644 tests/baselines/reference/arrayLiterals2.js create mode 100644 tests/baselines/reference/arrayLiterals2ES5.js create mode 100644 tests/baselines/reference/arrayLiterals2ES5.types delete mode 100644 tests/baselines/reference/arrayLiterals2ES6.errors.txt create mode 100644 tests/baselines/reference/arrayLiterals2ES6.types delete mode 100644 tests/baselines/reference/arrayLiterals3ES6.errors.txt delete mode 100644 tests/baselines/reference/arrayLiterals3ES6.js delete mode 100644 tests/baselines/reference/arrayLiterals4.errors.txt delete mode 100644 tests/baselines/reference/arrayLiterals4.js delete mode 100644 tests/baselines/reference/arrayLiterals5.errors.txt delete mode 100644 tests/baselines/reference/arrayLiterals5.js delete mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts create mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES5.ts delete mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts delete mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts delete mode 100644 tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts diff --git a/tests/baselines/reference/arrayLiterals2.errors.txt b/tests/baselines/reference/arrayLiterals2.errors.txt deleted file mode 100644 index 149d9a4747cca..0000000000000 --- a/tests/baselines/reference/arrayLiterals2.errors.txt +++ /dev/null @@ -1,60 +0,0 @@ -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(23,5): error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. - Property '0' is missing in type '(string[] | number[])[]'. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(24,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. - Property '0' is missing in type 'number[]'. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts(27,5): error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. - Types of property 'push' are incompatible. - Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. - Types of parameters 'items' and 'items' are incompatible. - Type 'string | number' is not assignable to type 'Number'. - Type 'string' is not assignable to type 'Number'. - Property 'toFixed' is missing in type 'String'. - - -==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts (3 errors) ==== - var a = [2,3,4] - var a1 = ["hello", "world"] - var a2 = [undefined, null, undefined]; - var a3 = [] - var a4: number[] = [...a3]; - var a5: number[] = []; - - var b = [, , , ...a,"hello"]; - var c = [() => 1,]; - var d = [...c,,]; - var e = [,,...d]; - var g = [[1, 2, "hello"], ["string", true]]; - var h = [...g]; - var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; - var j = [...i]; - var k:Array = [...i]; - interface tup { - 0: number[]|string[]; - 1: number[]|string[]; - } - interface myArray extends Array {} - interface myArray2 extends Array {} - var l: tup = [...i]; // error - ~ -!!! error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. -!!! error TS2322: Property '0' is missing in type '(string[] | number[])[]'. - var m: [number, number, number] = [...a]; // error - ~ -!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. -!!! error TS2322: Property '0' is missing in type 'number[]'. - var n: number[] = [...a]; - var o: myArray = [...a]; - var p: myArray = [...a, ...a1]; // error - ~ -!!! error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. -!!! error TS2322: Types of property 'push' are incompatible. -!!! error TS2322: Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. -!!! error TS2322: Types of parameters 'items' and 'items' are incompatible. -!!! error TS2322: Type 'string | number' is not assignable to type 'Number'. -!!! error TS2322: Type 'string' is not assignable to type 'Number'. -!!! error TS2322: Property 'toFixed' is missing in type 'String'. - var q: myArray2 = [...a, ...a1]; - var r = [...a2]; - var r1 = [...a3]; - var r2 = [...a4]; - var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals2.js b/tests/baselines/reference/arrayLiterals2.js deleted file mode 100644 index 42cfb13c96ac4..0000000000000 --- a/tests/baselines/reference/arrayLiterals2.js +++ /dev/null @@ -1,60 +0,0 @@ -//// [arrayLiterals2.ts] -var a = [2,3,4] -var a1 = ["hello", "world"] -var a2 = [undefined, null, undefined]; -var a3 = [] -var a4: number[] = [...a3]; -var a5: number[] = []; - -var b = [, , , ...a,"hello"]; -var c = [() => 1,]; -var d = [...c,,]; -var e = [,,...d]; -var g = [[1, 2, "hello"], ["string", true]]; -var h = [...g]; -var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; -var j = [...i]; -var k:Array = [...i]; -interface tup { - 0: number[]|string[]; - 1: number[]|string[]; -} -interface myArray extends Array {} -interface myArray2 extends Array {} -var l: tup = [...i]; // error -var m: [number, number, number] = [...a]; // error -var n: number[] = [...a]; -var o: myArray = [...a]; -var p: myArray = [...a, ...a1]; // error -var q: myArray2 = [...a, ...a1]; -var r = [...a2]; -var r1 = [...a3]; -var r2 = [...a4]; -var r3:number[][] = [[...a4]]; - -//// [arrayLiterals2.js] -var a = [2, 3, 4]; -var a1 = ["hello", "world"]; -var a2 = [undefined, null, undefined]; -var a3 = []; -var a4 = a3; -var a5 = []; -var b = [, , ].concat(a, ["hello"]); -var c = [function () { return 1; },]; -var d = c.concat([,]); -var e = [, ].concat(d); -var g = [[1, 2, "hello"], ["string", true]]; -var h = g; -var i = [[1, 2, 3], ["hello", "string"]]; -var j = i; -var k = i; -var l = i; // error -var m = a; // error -var n = a; -var o = a; -var p = a.concat(a1); // error -var q = a.concat(a1); -var r = a2; -var r1 = a3; -var r2 = a4; -var r3 = [a4]; diff --git a/tests/baselines/reference/arrayLiterals2ES5.js b/tests/baselines/reference/arrayLiterals2ES5.js new file mode 100644 index 0000000000000..0ff82e909707e --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES5.js @@ -0,0 +1,104 @@ +//// [arrayLiterals2ES5.ts] +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [,, 2, 3, 4] +var a1 = ["hello", "world"] +var a2 = [, , , ...a0, "hello"]; +var a3 = [,, ...a0] +var a4 = [() => 1, ]; +var a5 = [...a0, , ] + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +var temp3 = [undefined, null, undefined]; +var temp4 = []; + +interface myArray extends Array { } +interface myArray2 extends Array { } +var d0 = [1, true, ...temp,]; // has type (string|number|boolean)[] +var d1 = [...temp]; // has type string[] +var d2: number[] = [...temp1]; +var d3: myArray = [...temp1]; +var d4: myArray2 = [...temp, ...temp1]; +var d5 = [...temp3]; +var d6 = [...temp4]; +var d7 = [...[...temp1]]; +var d8: number[][] = [[...temp1]] +var d9 = [[...temp1], ...["hello"]]; + +//// [arrayLiterals2ES5.js] +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement +// SpreadElement: +// ... AssignmentExpression +var a0 = [, , 2, 3, 4]; +var a1 = ["hello", "world"]; +var a2 = [, , ].concat(a0, ["hello"]); +var a3 = [, ].concat(a0); +var a4 = [function () { return 1; },]; +var a5 = a0.concat([,]); +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. +var b0 = [undefined, null, undefined]; +var b1 = [[1, 2, 3], ["hello", "string"]]; +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. +var _a = [1, 2], c0 = _a[0], c1 = _a[1]; // tuple type [number, number] +var _b = [1, 2, true], c2 = _b[0], c3 = _b[1]; // tuple type [number, number, boolean] +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2 = [[1, 2, 3], ["hello", "string"]]; +var temp3 = [undefined, null, undefined]; +var temp4 = []; +var d0 = [1, true].concat(temp); // has type (string|number|boolean)[] +var d1 = temp; // has type string[] +var d2 = temp1; +var d3 = temp1; +var d4 = temp.concat(temp1); +var d5 = temp3; +var d6 = temp4; +var d7 = temp1; +var d8 = [temp1]; +var d9 = [temp1].concat(["hello"]); diff --git a/tests/baselines/reference/arrayLiterals2ES5.types b/tests/baselines/reference/arrayLiterals2ES5.types new file mode 100644 index 0000000000000..cd55e4ea51401 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES5.types @@ -0,0 +1,184 @@ +=== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES5.ts === +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [,, 2, 3, 4] +>a0 : number[] +>[,, 2, 3, 4] : number[] + +var a1 = ["hello", "world"] +>a1 : string[] +>["hello", "world"] : string[] + +var a2 = [, , , ...a0, "hello"]; +>a2 : (string | number)[] +>[, , , ...a0, "hello"] : (string | number)[] +>...a0 : number +>a0 : number[] + +var a3 = [,, ...a0] +>a3 : number[] +>[,, ...a0] : number[] +>...a0 : number +>a0 : number[] + +var a4 = [() => 1, ]; +>a4 : (() => number)[] +>[() => 1, ] : (() => number)[] +>() => 1 : () => number + +var a5 = [...a0, , ] +>a5 : number[] +>[...a0, , ] : number[] +>...a0 : number +>a0 : number[] + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +>b0 : [any, any, any] +>[undefined, null, undefined] : [undefined, null, undefined] +>undefined : undefined +>undefined : undefined + +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>b1 : [number[], string[]] +>[[1, 2, 3], ["hello", "string"]] : [number[], string[]] +>[1, 2, 3] : number[] +>["hello", "string"] : string[] + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +>c0 : number +>c1 : number +>[1, 2] : [number, number] + +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] +>c2 : number +>c3 : number +>[1, 2, true] : [number, number, boolean] + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +>temp : string[] +>["s", "t", "r"] : string[] + +var temp1 = [1, 2, 3]; +>temp1 : number[] +>[1, 2, 3] : number[] + +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>temp2 : [number[], string[]] +>[[1, 2, 3], ["hello", "string"]] : [number[], string[]] +>[1, 2, 3] : number[] +>["hello", "string"] : string[] + +var temp3 = [undefined, null, undefined]; +>temp3 : any[] +>[undefined, null, undefined] : null[] +>undefined : undefined +>undefined : undefined + +var temp4 = []; +>temp4 : any[] +>[] : undefined[] + +interface myArray extends Array { } +>myArray : myArray +>Array : T[] +>Number : Number + +interface myArray2 extends Array { } +>myArray2 : myArray2 +>Array : T[] +>Number : Number +>String : String + +var d0 = [1, true, ...temp,]; // has type (string|number|boolean)[] +>d0 : (string | number | boolean)[] +>[1, true, ...temp,] : (string | number | boolean)[] +>...temp : string +>temp : string[] + +var d1 = [...temp]; // has type string[] +>d1 : string[] +>[...temp] : string[] +>...temp : string +>temp : string[] + +var d2: number[] = [...temp1]; +>d2 : number[] +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] + +var d3: myArray = [...temp1]; +>d3 : myArray +>myArray : myArray +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] + +var d4: myArray2 = [...temp, ...temp1]; +>d4 : myArray2 +>myArray2 : myArray2 +>[...temp, ...temp1] : (string | number)[] +>...temp : string +>temp : string[] +>...temp1 : number +>temp1 : number[] + +var d5 = [...temp3]; +>d5 : any[] +>[...temp3] : any[] +>...temp3 : any +>temp3 : any[] + +var d6 = [...temp4]; +>d6 : any[] +>[...temp4] : any[] +>...temp4 : any +>temp4 : any[] + +var d7 = [...[...temp1]]; +>d7 : number[] +>[...[...temp1]] : number[] +>...[...temp1] : number +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] + +var d8: number[][] = [[...temp1]] +>d8 : number[][] +>[[...temp1]] : number[][] +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] + +var d9 = [[...temp1], ...["hello"]]; +>d9 : (string | number[])[] +>[[...temp1], ...["hello"]] : (string | number[])[] +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] +>...["hello"] : string +>["hello"] : string[] + diff --git a/tests/baselines/reference/arrayLiterals2ES6.errors.txt b/tests/baselines/reference/arrayLiterals2ES6.errors.txt deleted file mode 100644 index bb3247ec45304..0000000000000 --- a/tests/baselines/reference/arrayLiterals2ES6.errors.txt +++ /dev/null @@ -1,60 +0,0 @@ -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(23,5): error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. - Property '0' is missing in type '(string[] | number[])[]'. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(24,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. - Property '0' is missing in type 'number[]'. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts(27,5): error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. - Types of property 'push' are incompatible. - Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. - Types of parameters 'items' and 'items' are incompatible. - Type 'string | number' is not assignable to type 'Number'. - Type 'string' is not assignable to type 'Number'. - Property 'toFixed' is missing in type 'String'. - - -==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts (3 errors) ==== - var a = [2,3,4] - var a1 = ["hello", "world"] - var a2 = [undefined, null, undefined]; - var a3 = [] - var a4: number[] = [...a3]; - var a5: number[] = []; - - var b = [, , , ...a,"hello"]; - var c = [() => 1,]; - var d = [...c,,]; - var e = [,,...d]; - var g = [[1, 2, "hello"], ["string", true]]; - var h = [...g]; - var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; - var j = [...i]; - var k:Array = [...i]; - interface tup { - 0: number[]|string[]; - 1: number[]|string[]; - } - interface myArray extends Array {} - interface myArray2 extends Array {} - var l: tup = [...i]; // error - ~ -!!! error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. -!!! error TS2322: Property '0' is missing in type '(string[] | number[])[]'. - var m: [number, number, number] = [...a]; // error - ~ -!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. -!!! error TS2322: Property '0' is missing in type 'number[]'. - var n: number[] = [...a]; - var o: myArray = [...a]; - var p: myArray = [...a, ...a1]; // error - ~ -!!! error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. -!!! error TS2322: Types of property 'push' are incompatible. -!!! error TS2322: Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. -!!! error TS2322: Types of parameters 'items' and 'items' are incompatible. -!!! error TS2322: Type 'string | number' is not assignable to type 'Number'. -!!! error TS2322: Type 'string' is not assignable to type 'Number'. -!!! error TS2322: Property 'toFixed' is missing in type 'String'. - var q: myArray2 = [...a, ...a1]; - var r = [...a2]; - var r1 = [...a3]; - var r2 = [...a4]; - var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals2ES6.js b/tests/baselines/reference/arrayLiterals2ES6.js index 8cdecdd3be468..cb6bf2684e858 100644 --- a/tests/baselines/reference/arrayLiterals2ES6.js +++ b/tests/baselines/reference/arrayLiterals2ES6.js @@ -1,60 +1,100 @@ //// [arrayLiterals2ES6.ts] -var a = [2,3,4] +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [, , 2, 3, 4] var a1 = ["hello", "world"] -var a2 = [undefined, null, undefined]; -var a3 = [] -var a4: number[] = [...a3]; -var a5: number[] = []; - -var b = [, , , ...a,"hello"]; -var c = [() => 1,]; -var d = [...c,,]; -var e = [,,...d]; -var g = [[1, 2, "hello"], ["string", true]]; -var h = [...g]; -var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; -var j = [...i]; -var k:Array = [...i]; -interface tup { - 0: number[]|string[]; - 1: number[]|string[]; -} -interface myArray extends Array {} -interface myArray2 extends Array {} -var l: tup = [...i]; // error -var m: [number, number, number] = [...a]; // error -var n: number[] = [...a]; -var o: myArray = [...a]; -var p: myArray = [...a, ...a1]; // error -var q: myArray2 = [...a, ...a1]; -var r = [...a2]; -var r1 = [...a3]; -var r2 = [...a4]; -var r3:number[][] = [[...a4]]; +var a2 = [, , , ...a0, "hello"]; +var a3 = [, , ...a0] +var a4 = [() => 1, ]; +var a5 = [...a0, , ] + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + +interface myArray extends Array { } +interface myArray2 extends Array { } +var d0 = [1, true, ...temp, ]; // has type (string|number|boolean)[] +var d1 = [...temp]; // has type string[] +var d2: number[] = [...temp1]; +var d3: myArray = [...temp1]; +var d4: myArray2 = [...temp, ...temp1]; +var d5 = [...a2]; +var d6 = [...a3]; +var d7 = [...a4]; +var d8: number[][] = [[...temp1]] +var d9 = [[...temp1], ...["hello"]]; //// [arrayLiterals2ES6.js] -var a = [2, 3, 4]; +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement +// SpreadElement: +// ... AssignmentExpression +var a0 = [, , 2, 3, 4]; var a1 = ["hello", "world"]; -var a2 = [undefined, null, undefined]; -var a3 = []; -var a4 = [...a3]; -var a5 = []; -var b = [, , , ...a, "hello"]; -var c = [() => 1,]; -var d = [...c, ,]; -var e = [, , ...d]; -var g = [[1, 2, "hello"], ["string", true]]; -var h = [...g]; -var i = [[1, 2, 3], ["hello", "string"]]; -var j = [...i]; -var k = [...i]; -var l = [...i]; // error -var m = [...a]; // error -var n = [...a]; -var o = [...a]; -var p = [...a, ...a1]; // error -var q = [...a, ...a1]; -var r = [...a2]; -var r1 = [...a3]; -var r2 = [...a4]; -var r3 = [[...a4]]; +var a2 = [, , , ...a0, "hello"]; +var a3 = [, , ...a0]; +var a4 = [() => 1,]; +var a5 = [...a0, ,]; +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. +var b0 = [undefined, null, undefined]; +var b1 = [[1, 2, 3], ["hello", "string"]]; +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. +var [c0, c1] = [1, 2]; // tuple type [number, number] +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2 = [[1, 2, 3], ["hello", "string"]]; +var d0 = [1, true, ...temp,]; // has type (string|number|boolean)[] +var d1 = [...temp]; // has type string[] +var d2 = [...temp1]; +var d3 = [...temp1]; +var d4 = [...temp, ...temp1]; +var d5 = [...a2]; +var d6 = [...a3]; +var d7 = [...a4]; +var d8 = [[...temp1]]; +var d9 = [[...temp1], ...["hello"]]; diff --git a/tests/baselines/reference/arrayLiterals2ES6.types b/tests/baselines/reference/arrayLiterals2ES6.types new file mode 100644 index 0000000000000..0ae1487d190c9 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES6.types @@ -0,0 +1,172 @@ +=== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts === +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [, , 2, 3, 4] +>a0 : number[] +>[, , 2, 3, 4] : number[] + +var a1 = ["hello", "world"] +>a1 : string[] +>["hello", "world"] : string[] + +var a2 = [, , , ...a0, "hello"]; +>a2 : (string | number)[] +>[, , , ...a0, "hello"] : (string | number)[] +>...a0 : number +>a0 : number[] + +var a3 = [, , ...a0] +>a3 : number[] +>[, , ...a0] : number[] +>...a0 : number +>a0 : number[] + +var a4 = [() => 1, ]; +>a4 : (() => number)[] +>[() => 1, ] : (() => number)[] +>() => 1 : () => number + +var a5 = [...a0, , ] +>a5 : number[] +>[...a0, , ] : number[] +>...a0 : number +>a0 : number[] + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +>b0 : [any, any, any] +>[undefined, null, undefined] : [undefined, null, undefined] +>undefined : undefined +>undefined : undefined + +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>b1 : [number[], string[]] +>[[1, 2, 3], ["hello", "string"]] : [number[], string[]] +>[1, 2, 3] : number[] +>["hello", "string"] : string[] + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +>c0 : number +>c1 : number +>[1, 2] : [number, number] + +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] +>c2 : number +>c3 : number +>[1, 2, true] : [number, number, boolean] + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +>temp : string[] +>["s", "t", "r"] : string[] + +var temp1 = [1, 2, 3]; +>temp1 : number[] +>[1, 2, 3] : number[] + +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>temp2 : [number[], string[]] +>[[1, 2, 3], ["hello", "string"]] : [number[], string[]] +>[1, 2, 3] : number[] +>["hello", "string"] : string[] + +interface myArray extends Array { } +>myArray : myArray +>Array : T[] +>Number : Number + +interface myArray2 extends Array { } +>myArray2 : myArray2 +>Array : T[] +>Number : Number +>String : String + +var d0 = [1, true, ...temp, ]; // has type (string|number|boolean)[] +>d0 : (string | number | boolean)[] +>[1, true, ...temp, ] : (string | number | boolean)[] +>...temp : string +>temp : string[] + +var d1 = [...temp]; // has type string[] +>d1 : string[] +>[...temp] : string[] +>...temp : string +>temp : string[] + +var d2: number[] = [...temp1]; +>d2 : number[] +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] + +var d3: myArray = [...temp1]; +>d3 : myArray +>myArray : myArray +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] + +var d4: myArray2 = [...temp, ...temp1]; +>d4 : myArray2 +>myArray2 : myArray2 +>[...temp, ...temp1] : (string | number)[] +>...temp : string +>temp : string[] +>...temp1 : number +>temp1 : number[] + +var d5 = [...a2]; +>d5 : (string | number)[] +>[...a2] : (string | number)[] +>...a2 : string | number +>a2 : (string | number)[] + +var d6 = [...a3]; +>d6 : number[] +>[...a3] : number[] +>...a3 : number +>a3 : number[] + +var d7 = [...a4]; +>d7 : (() => number)[] +>[...a4] : (() => number)[] +>...a4 : () => number +>a4 : (() => number)[] + +var d8: number[][] = [[...temp1]] +>d8 : number[][] +>[[...temp1]] : number[][] +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] + +var d9 = [[...temp1], ...["hello"]]; +>d9 : (string | number[])[] +>[[...temp1], ...["hello"]] : (string | number[])[] +>[...temp1] : number[] +>...temp1 : number +>temp1 : number[] +>...["hello"] : string +>["hello"] : string[] + diff --git a/tests/baselines/reference/arrayLiterals3.errors.txt b/tests/baselines/reference/arrayLiterals3.errors.txt index 35bedb5485416..74cfdb165d7ac 100644 --- a/tests/baselines/reference/arrayLiterals3.errors.txt +++ b/tests/baselines/reference/arrayLiterals3.errors.txt @@ -1,62 +1,86 @@ -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(8,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(10,5): error TS2322: Type 'undefined[]' is not assignable to type '[any, any, any]'. + Property '0' is missing in type 'undefined[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(11,5): error TS2322: Type '[string, number, boolean]' is not assignable to type '[boolean, string, number]'. + Types of property '0' are incompatible. + Type 'string' is not assignable to type 'boolean'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(17,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. Types of property 'pop' are incompatible. Type '() => string | number | boolean' is not assignable to type '() => number'. Type 'string | number | boolean' is not assignable to type 'number'. Type 'string' is not assignable to type 'number'. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(35,6): error TS2461: Type 'string | number[]' is not an array type. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(40,16): error TS2461: Type 'IArguments' is not an array type. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(32,5): error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. + Property '0' is missing in type '(string[] | number[])[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(33,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. + Property '0' is missing in type 'number[]'. +tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(34,5): error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. + Types of property 'push' are incompatible. + Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. + Types of parameters 'items' and 'items' are incompatible. + Type 'string | number' is not assignable to type 'Number'. + Type 'string' is not assignable to type 'Number'. + Property 'toFixed' is missing in type 'String'. -==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts (3 errors) ==== - interface I0 extends Array { - 0: number; - 1: number; - 2: string; - 3: boolean; - } - var [a, b]: [number, number] = [1, 2]; - var [a1, b1]: [number, number] = [1, 2, "string", true]; // error +==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts (6 errors) ==== + // Each element expression in a non-empty array literal is processed as follows: + // - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) + // by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, + // the element expression is contextually typed by the type of that property. + + // The resulting type an array literal expression is determined as follows: + // - If the array literal contains no spread elements and is contextually typed by a tuple-like type, + // the resulting type is a tuple type constructed from the types of the element expressions. + + var a0: [any, any, any] = []; // Error + ~~ +!!! error TS2322: Type 'undefined[]' is not assignable to type '[any, any, any]'. +!!! error TS2322: Property '0' is missing in type 'undefined[]'. + var a1: [boolean, string, number] = ["string", 1, true]; // Error + ~~ +!!! error TS2322: Type '[string, number, boolean]' is not assignable to type '[boolean, string, number]'. +!!! error TS2322: Types of property '0' are incompatible. +!!! error TS2322: Type 'string' is not assignable to type 'boolean'. + + // The resulting type an array literal expression is determined as follows: + // - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), + // the resulting type is a tuple type constructed from the types of the element expressions. + + var [b1, b2]: [number, number] = [1, 2, "string", true]; ~~~~~~~~ !!! error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. !!! error TS2322: Types of property 'pop' are incompatible. !!! error TS2322: Type '() => string | number | boolean' is not assignable to type '() => number'. !!! error TS2322: Type 'string | number | boolean' is not assignable to type 'number'. !!! error TS2322: Type 'string' is not assignable to type 'number'. - var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; - var [c1, c2, c3]: I0 = [10, 11, "string", true]; - interface I extends Array{ - 0: string|number; - 1: string|number; - 2: string|number; - } - interface I2 extends Array { - 0: number; - 1: number; - 2: string|number; - } - var tup: [number, number, string] = [1, 2, "world"]; - var [c, d, e]: I = tup; - var [f, g]: I2 = tup; - var h1: string| number; - var [f1, g1,h1]: I2 = tup; - h1 = g1; - var arr1 = [1, 2, 3]; - var arr2 = [true, false, true]; - var arr3 = [true] - var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; - var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; - var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; - var [[r, s], t] = [[...arr1], "hello"]; - var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error - ~~~~~~~~ -!!! error TS2461: Type 'string | number[]' is not an array type. - var [x] = [...["word"]]; - var [...y] = [...["word"]]; - var z = [...[...["word"]]]; - function foobar() { - return [...arguments]; - ~~~~~~~~~ -!!! error TS2461: Type 'IArguments' is not an array type. + // The resulting type an array literal expression is determined as follows: + // - the resulting type is an array type with an element type that is the union of the types of the + // non - spread element expressions and the numeric index signature types of the spread element expressions + var temp = ["s", "t", "r"]; + var temp1 = [1, 2, 3]; + var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + + interface tup { + 0: number[]|string[]; + 1: number[]|string[]; } - var [...as] = [[, , , , ]]; \ No newline at end of file + interface myArray extends Array { } + interface myArray2 extends Array { } + var c0: tup = [...temp2]; // Error + ~~ +!!! error TS2322: Type '(string[] | number[])[]' is not assignable to type 'tup'. +!!! error TS2322: Property '0' is missing in type '(string[] | number[])[]'. + var c1: [number, number, number] = [...temp1]; // Error cannot assign number[] to [number, number, number] + ~~ +!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'. +!!! error TS2322: Property '0' is missing in type 'number[]'. + var c2: myArray = [...temp1, ...temp]; // Error cannot assign (number|string)[] to number[] + ~~ +!!! error TS2322: Type '(string | number)[]' is not assignable to type 'myArray'. +!!! error TS2322: Types of property 'push' are incompatible. +!!! error TS2322: Type '(...items: (string | number)[]) => number' is not assignable to type '(...items: Number[]) => number'. +!!! error TS2322: Types of parameters 'items' and 'items' are incompatible. +!!! error TS2322: Type 'string | number' is not assignable to type 'Number'. +!!! error TS2322: Type 'string' is not assignable to type 'Number'. +!!! error TS2322: Property 'toFixed' is missing in type 'String'. + \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals3.js b/tests/baselines/reference/arrayLiterals3.js index 6ad064e20dac6..091c61480688f 100644 --- a/tests/baselines/reference/arrayLiterals3.js +++ b/tests/baselines/reference/arrayLiterals3.js @@ -1,70 +1,60 @@ //// [arrayLiterals3.ts] -interface I0 extends Array { - 0: number; - 1: number; - 2: string; - 3: boolean; -} -var [a, b]: [number, number] = [1, 2]; -var [a1, b1]: [number, number] = [1, 2, "string", true]; // error -var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; -var [c1, c2, c3]: I0 = [10, 11, "string", true]; -interface I extends Array{ - 0: string|number; - 1: string|number; - 2: string|number; -} -interface I2 extends Array { - 0: number; - 1: number; - 2: string|number; -} -var tup: [number, number, string] = [1, 2, "world"]; -var [c, d, e]: I = tup; -var [f, g]: I2 = tup; -var h1: string| number; -var [f1, g1,h1]: I2 = tup; -h1 = g1; +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var a0: [any, any, any] = []; // Error +var a1: [boolean, string, number] = ["string", 1, true]; // Error -var arr1 = [1, 2, 3]; -var arr2 = [true, false, true]; -var arr3 = [true] -var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; -var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; -var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; -var [[r, s], t] = [[...arr1], "hello"]; -var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error -var [x] = [...["word"]]; -var [...y] = [...["word"]]; -var z = [...[...["word"]]]; -function foobar() { - return [...arguments]; +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [b1, b2]: [number, number] = [1, 2, "string", true]; + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; } -var [...as] = [[, , , , ]]; +interface myArray extends Array { } +interface myArray2 extends Array { } +var c0: tup = [...temp2]; // Error +var c1: [number, number, number] = [...temp1]; // Error cannot assign number[] to [number, number, number] +var c2: myArray = [...temp1, ...temp]; // Error cannot assign (number|string)[] to number[] + //// [arrayLiterals3.js] -var _a = [1, 2], a = _a[0], b = _a[1]; -var _b = [1, 2, "string", true], a1 = _b[0], b1 = _b[1]; // error -var _c = [1, 2, 3, "string"], a2 = _c[0], b2 = _c[1]; -var _d = [10, 11, "string", true], c1 = _d[0], c2 = _d[1], c3 = _d[2]; -var tup = [1, 2, "world"]; -var c = tup[0], d = tup[1], e = tup[2]; -var f = tup[0], g = tup[1]; -var h1; -var f1 = tup[0], g1 = tup[1], h1 = tup[2]; -h1 = g1; -var arr1 = [1, 2, 3]; -var arr2 = [true, false, true]; -var arr3 = [true]; -var _e = [arr1, arr2], _f = _e[0], foo1 = _f[0], foo2 = _f[1], foo3 = _f[2], _g = _e[1], boo1 = _g[0], boo2 = _g[1], boo3 = _g[2]; -var _h = arr1.concat(arr2), bar1 = _h[0], bar2 = _h[1], bar3 = _h[2], bar1 = _h[3], bar2 = _h[4], bar3 = _h[5]; -var _j = arr1.concat(arr3), bar1 = _j[0], bar2 = _j[1], bar3 = _j[2], bar1 = _j[3], bar2 = _j[4]; -var _k = [arr1, "hello"], _l = _k[0], r = _l[0], s = _l[1], t = _k[1]; -var _m = [arr1].concat(["hello"]), _o = _m[0], r1 = _o[0], s1 = _o[1], t1 = _m[1]; // error -var x = (["word"])[0]; -var _p = ["word"], y = _p.slice(0); -var z = ["word"]; -function foobar() { - return arguments; -} -var _q = [[, , , ,]], as = _q.slice(0); +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. +var a0 = []; // Error +var a1 = ["string", 1, true]; // Error +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. +var _a = [1, 2, "string", true], b1 = _a[0], b2 = _a[1]; +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2 = [[1, 2, 3], ["hello", "string"]]; +var c0 = temp2; // Error +var c1 = temp1; // Error cannot assign number[] to [number, number, number] +var c2 = temp1.concat(temp); // Error cannot assign (number|string)[] to number[] diff --git a/tests/baselines/reference/arrayLiterals3ES6.errors.txt b/tests/baselines/reference/arrayLiterals3ES6.errors.txt deleted file mode 100644 index 1490a0fbcfa86..0000000000000 --- a/tests/baselines/reference/arrayLiterals3ES6.errors.txt +++ /dev/null @@ -1,52 +0,0 @@ -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts(8,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. - Types of property 'pop' are incompatible. - Type '() => string | number | boolean' is not assignable to type '() => number'. - Type 'string | number | boolean' is not assignable to type 'number'. - Type 'string' is not assignable to type 'number'. - - -==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts (1 errors) ==== - interface I0 extends Array { - 0: number; - 1: number; - 2: string; - 3: boolean; - } - var [a, b]: [number, number] = [1, 2]; - var [a1, b1]: [number, number] = [1, 2, "string", true]; // error - ~~~~~~~~ -!!! error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'. -!!! error TS2322: Types of property 'pop' are incompatible. -!!! error TS2322: Type '() => string | number | boolean' is not assignable to type '() => number'. -!!! error TS2322: Type 'string | number | boolean' is not assignable to type 'number'. -!!! error TS2322: Type 'string' is not assignable to type 'number'. - var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; - var [c1, c2, c3]: I0 = [10, 11, "string", true]; - interface I extends Array{ - 0: string|number; - 1: string|number; - 2: string|number; - } - interface I2 extends Array { - 0: number; - 1: number; - 2: string|number; - } - var tup: [number, number, string] = [1, 2, "world"]; - var [c, d, e]: I = tup; - var [f, g]: I2 = tup; - var h1: string| number; - var [f1, g1,h1]: I2 = tup; - h1 = g1; - - var arr1 = [1, 2, 3]; - var arr2 = [true, false, true]; - var arr3 = [true] - var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; - var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; - var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; - var [[r, s], t] = [[...arr1], "hello"]; - var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error - var [x] = [...["word"]]; - var [...y] = [...["word"]]; - var z = [...[...["word"]]]; \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals3ES6.js b/tests/baselines/reference/arrayLiterals3ES6.js deleted file mode 100644 index f685ea9c7190f..0000000000000 --- a/tests/baselines/reference/arrayLiterals3ES6.js +++ /dev/null @@ -1,62 +0,0 @@ -//// [arrayLiterals3ES6.ts] -interface I0 extends Array { - 0: number; - 1: number; - 2: string; - 3: boolean; -} -var [a, b]: [number, number] = [1, 2]; -var [a1, b1]: [number, number] = [1, 2, "string", true]; // error -var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; -var [c1, c2, c3]: I0 = [10, 11, "string", true]; -interface I extends Array{ - 0: string|number; - 1: string|number; - 2: string|number; -} -interface I2 extends Array { - 0: number; - 1: number; - 2: string|number; -} -var tup: [number, number, string] = [1, 2, "world"]; -var [c, d, e]: I = tup; -var [f, g]: I2 = tup; -var h1: string| number; -var [f1, g1,h1]: I2 = tup; -h1 = g1; - -var arr1 = [1, 2, 3]; -var arr2 = [true, false, true]; -var arr3 = [true] -var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; -var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; -var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; -var [[r, s], t] = [[...arr1], "hello"]; -var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error -var [x] = [...["word"]]; -var [...y] = [...["word"]]; -var z = [...[...["word"]]]; - -//// [arrayLiterals3ES6.js] -var [a, b] = [1, 2]; -var [a1, b1] = [1, 2, "string", true]; // error -var [a2, b2] = [1, 2, 3, "string"]; -var [c1, c2, c3] = [10, 11, "string", true]; -var tup = [1, 2, "world"]; -var [c, d, e] = tup; -var [f, g] = tup; -var h1; -var [f1, g1, h1] = tup; -h1 = g1; -var arr1 = [1, 2, 3]; -var arr2 = [true, false, true]; -var arr3 = [true]; -var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; -var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; -var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; -var [[r, s], t] = [[...arr1], "hello"]; -var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error -var [x] = [...["word"]]; -var [...y] = [...["word"]]; -var z = [...[...["word"]]]; diff --git a/tests/baselines/reference/arrayLiterals4.errors.txt b/tests/baselines/reference/arrayLiterals4.errors.txt deleted file mode 100644 index 5fc0fe2c51e72..0000000000000 --- a/tests/baselines/reference/arrayLiterals4.errors.txt +++ /dev/null @@ -1,31 +0,0 @@ -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(2,6): error TS1212: Identifier expected. 'public' is a reserved word in strict mode -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(2,14): error TS1212: Identifier expected. 'static' is a reserved word in strict mode -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(3,5): error TS1212: Identifier expected. 'protected' is a reserved word in strict mode -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(4,21): error TS1212: Identifier expected. 'protected' is a reserved word in strict mode -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(5,7): error TS1212: Identifier expected. 'public' is a reserved word in strict mode -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(5,15): error TS1212: Identifier expected. 'package' is a reserved word in strict mode -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts(6,9): error TS1212: Identifier expected. 'implements' is a reserved word in strict mode - - -==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts (7 errors) ==== - "use strict" - var [public, static] = [1, 23, ]; - ~~~~~~ -!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode - ~~~~~~ -!!! error TS1212: Identifier expected. 'static' is a reserved word in strict mode - var protected = [1, 2, 3]; - ~~~~~~~~~ -!!! error TS1212: Identifier expected. 'protected' is a reserved word in strict mode - var [a, b, c] = [...protected]; - ~~~~~~~~~ -!!! error TS1212: Identifier expected. 'protected' is a reserved word in strict mode - var [[public, package]] = [[1, [2, 3]]]; - ~~~~~~ -!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode - ~~~~~~~ -!!! error TS1212: Identifier expected. 'package' is a reserved word in strict mode - var [...implements] = [[]]; - ~~~~~~~~~~ -!!! error TS1212: Identifier expected. 'implements' is a reserved word in strict mode - \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals4.js b/tests/baselines/reference/arrayLiterals4.js deleted file mode 100644 index 28c7fb1030669..0000000000000 --- a/tests/baselines/reference/arrayLiterals4.js +++ /dev/null @@ -1,16 +0,0 @@ -//// [arrayLiterals4.ts] -"use strict" -var [public, static] = [1, 23, ]; -var protected = [1, 2, 3]; -var [a, b, c] = [...protected]; -var [[public, package]] = [[1, [2, 3]]]; -var [...implements] = [[]]; - - -//// [arrayLiterals4.js] -"use strict"; -var _a = [1, 23,], public = _a[0], static = _a[1]; -var protected = [1, 2, 3]; -var _b = protected, a = _b[0], b = _b[1], c = _b[2]; -var _c = ([[1, [2, 3]]])[0], public = _c[0], package = _c[1]; -var _d = [[]], implements = _d.slice(0); diff --git a/tests/baselines/reference/arrayLiterals5.errors.txt b/tests/baselines/reference/arrayLiterals5.errors.txt deleted file mode 100644 index ee928841b6af0..0000000000000 --- a/tests/baselines/reference/arrayLiterals5.errors.txt +++ /dev/null @@ -1,46 +0,0 @@ -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,6): error TS1181: Array element destructuring pattern expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,11): error TS1005: '(' expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,13): error TS1109: Expression expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,16): error TS1005: '(' expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(1,18): error TS1128: Declaration or statement expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,6): error TS1181: Array element destructuring pattern expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,9): error TS1005: '(' expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,11): error TS2304: Cannot find name 'as'. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,13): error TS1005: ';' expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(2,15): error TS1128: Declaration or statement expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,9): error TS1003: Identifier expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,14): error TS1003: Identifier expected. -tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts(3,16): error TS1128: Declaration or statement expected. - - -==== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts (13 errors) ==== - var [while, for] = [1, 3, ]; - ~~~~~ -!!! error TS1181: Array element destructuring pattern expected. - ~ -!!! error TS1005: '(' expected. - ~~~ -!!! error TS1109: Expression expected. - ~ -!!! error TS1005: '(' expected. - ~ -!!! error TS1128: Declaration or statement expected. - var [for, as] = [, , , , ]; - ~~~ -!!! error TS1181: Array element destructuring pattern expected. - ~ -!!! error TS1005: '(' expected. - ~~ -!!! error TS2304: Cannot find name 'as'. - ~ -!!! error TS1005: ';' expected. - ~ -!!! error TS1128: Declaration or statement expected. - var [...break] = [...["hello"]]; - ~~~~~ -!!! error TS1003: Identifier expected. - ~ -!!! error TS1003: Identifier expected. - ~ -!!! error TS1128: Declaration or statement expected. - \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiterals5.js b/tests/baselines/reference/arrayLiterals5.js deleted file mode 100644 index faf4bb6fa70a8..0000000000000 --- a/tests/baselines/reference/arrayLiterals5.js +++ /dev/null @@ -1,19 +0,0 @@ -//// [arrayLiterals5.ts] -var [while, for] = [1, 3, ]; -var [for, as] = [, , , , ]; -var [...break] = [...["hello"]]; - - -//// [arrayLiterals5.js] -var _a = void 0; -while (, ) - for (; ; ) - ; -[1, 3,]; -var _b = void 0; -for (, as; ; ) - ; -[, , , ,]; -var _c = void 0, = _c.slice(0); -break ; -["hello"]; diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts deleted file mode 100644 index 6b6807e1d33c7..0000000000000 --- a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2.ts +++ /dev/null @@ -1,32 +0,0 @@ -var a = [2,3,4] -var a1 = ["hello", "world"] -var a2 = [undefined, null, undefined]; -var a3 = [] -var a4: number[] = [...a3]; -var a5: number[] = []; - -var b = [, , , ...a,"hello"]; -var c = [() => 1,]; -var d = [...c,,]; -var e = [,,...d]; -var g = [[1, 2, "hello"], ["string", true]]; -var h = [...g]; -var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; -var j = [...i]; -var k:Array = [...i]; -interface tup { - 0: number[]|string[]; - 1: number[]|string[]; -} -interface myArray extends Array {} -interface myArray2 extends Array {} -var l: tup = [...i]; // error -var m: [number, number, number] = [...a]; // error -var n: number[] = [...a]; -var o: myArray = [...a]; -var p: myArray = [...a, ...a1]; // error -var q: myArray2 = [...a, ...a1]; -var r = [...a2]; -var r1 = [...a3]; -var r2 = [...a4]; -var r3:number[][] = [[...a4]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES5.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES5.ts new file mode 100644 index 0000000000000..34c77288f3f48 --- /dev/null +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES5.ts @@ -0,0 +1,56 @@ +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [,, 2, 3, 4] +var a1 = ["hello", "world"] +var a2 = [, , , ...a0, "hello"]; +var a3 = [,, ...a0] +var a4 = [() => 1, ]; +var a5 = [...a0, , ] + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +var temp3 = [undefined, null, undefined]; +var temp4 = []; + +interface myArray extends Array { } +interface myArray2 extends Array { } +var d0 = [1, true, ...temp,]; // has type (string|number|boolean)[] +var d1 = [...temp]; // has type string[] +var d2: number[] = [...temp1]; +var d3: myArray = [...temp1]; +var d4: myArray2 = [...temp, ...temp1]; +var d5 = [...temp3]; +var d6 = [...temp4]; +var d7 = [...[...temp1]]; +var d8: number[][] = [[...temp1]] +var d9 = [[...temp1], ...["hello"]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts index 5a32af531e196..1a4e11e31ebe0 100644 --- a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts @@ -1,33 +1,55 @@ // @target:es6 -var a = [2,3,4] +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [, , 2, 3, 4] var a1 = ["hello", "world"] -var a2 = [undefined, null, undefined]; -var a3 = [] -var a4: number[] = [...a3]; -var a5: number[] = []; - -var b = [, , , ...a,"hello"]; -var c = [() => 1,]; -var d = [...c,,]; -var e = [,,...d]; -var g = [[1, 2, "hello"], ["string", true]]; -var h = [...g]; -var i: [number[], string[]] = [[1, 2, 3],["hello", "string"]]; -var j = [...i]; -var k:Array = [...i]; -interface tup { - 0: number[]|string[]; - 1: number[]|string[]; -} -interface myArray extends Array {} -interface myArray2 extends Array {} -var l: tup = [...i]; // error -var m: [number, number, number] = [...a]; // error -var n: number[] = [...a]; -var o: myArray = [...a]; -var p: myArray = [...a, ...a1]; // error -var q: myArray2 = [...a, ...a1]; -var r = [...a2]; -var r1 = [...a3]; -var r2 = [...a4]; -var r3:number[][] = [[...a4]]; \ No newline at end of file +var a2 = [, , , ...a0, "hello"]; +var a3 = [, , ...a0] +var a4 = [() => 1, ]; +var a5 = [...a0, , ] + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; + +interface myArray extends Array { } +interface myArray2 extends Array { } +var d0 = [1, true, ...temp, ]; // has type (string|number|boolean)[] +var d1 = [...temp]; // has type string[] +var d2: number[] = [...temp1]; +var d3: myArray = [...temp1]; +var d4: myArray2 = [...temp, ...temp1]; +var d5 = [...a2]; +var d6 = [...a3]; +var d7 = [...a4]; +var d8: number[][] = [[...temp1]] +var d9 = [[...temp1], ...["hello"]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts index 1a173d59d9229..fd07347f5036c 100644 --- a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts +++ b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts @@ -1,42 +1,34 @@ -interface I0 extends Array { - 0: number; - 1: number; - 2: string; - 3: boolean; -} -var [a, b]: [number, number] = [1, 2]; -var [a1, b1]: [number, number] = [1, 2, "string", true]; // error -var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; -var [c1, c2, c3]: I0 = [10, 11, "string", true]; -interface I extends Array{ - 0: string|number; - 1: string|number; - 2: string|number; -} -interface I2 extends Array { - 0: number; - 1: number; - 2: string|number; -} -var tup: [number, number, string] = [1, 2, "world"]; -var [c, d, e]: I = tup; -var [f, g]: I2 = tup; -var h1: string| number; -var [f1, g1,h1]: I2 = tup; -h1 = g1; +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var a0: [any, any, any] = []; // Error +var a1: [boolean, string, number] = ["string", 1, true]; // Error + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [b1, b2]: [number, number] = [1, 2, "string", true]; + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +var temp1 = [1, 2, 3]; +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; -var arr1 = [1, 2, 3]; -var arr2 = [true, false, true]; -var arr3 = [true] -var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; -var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; -var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; -var [[r, s], t] = [[...arr1], "hello"]; -var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error -var [x] = [...["word"]]; -var [...y] = [...["word"]]; -var z = [...[...["word"]]]; -function foobar() { - return [...arguments]; +interface tup { + 0: number[]|string[]; + 1: number[]|string[]; } -var [...as] = [[, , , , ]]; \ No newline at end of file +interface myArray extends Array { } +interface myArray2 extends Array { } +var c0: tup = [...temp2]; // Error +var c1: [number, number, number] = [...temp1]; // Error cannot assign number[] to [number, number, number] +var c2: myArray = [...temp1, ...temp]; // Error cannot assign (number|string)[] to number[] diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts deleted file mode 100644 index 817d27f0f92fe..0000000000000 --- a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3ES6.ts +++ /dev/null @@ -1,39 +0,0 @@ -// @target:es6 -interface I0 extends Array { - 0: number; - 1: number; - 2: string; - 3: boolean; -} -var [a, b]: [number, number] = [1, 2]; -var [a1, b1]: [number, number] = [1, 2, "string", true]; // error -var [a2, b2]: (number| string)[] = [1, 2, 3, "string"]; -var [c1, c2, c3]: I0 = [10, 11, "string", true]; -interface I extends Array{ - 0: string|number; - 1: string|number; - 2: string|number; -} -interface I2 extends Array { - 0: number; - 1: number; - 2: string|number; -} -var tup: [number, number, string] = [1, 2, "world"]; -var [c, d, e]: I = tup; -var [f, g]: I2 = tup; -var h1: string| number; -var [f1, g1,h1]: I2 = tup; -h1 = g1; - -var arr1 = [1, 2, 3]; -var arr2 = [true, false, true]; -var arr3 = [true] -var [[foo1, foo2, foo3], [boo1, boo2, boo3]] = [[...arr1], [...arr2]]; -var [bar1, bar2, bar3, bar1, bar2, bar3] = [...arr1, ...arr2]; -var [bar1, bar2, bar3, bar1, bar2] = [...arr1, ...arr3]; -var [[r, s], t] = [[...arr1], "hello"]; -var [[r1, s1], t1] = [[...arr1], ...["hello"]]; // error -var [x] = [...["word"]]; -var [...y] = [...["word"]]; -var z = [...[...["word"]]]; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts deleted file mode 100644 index 28319903b7c49..0000000000000 --- a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals4.ts +++ /dev/null @@ -1,6 +0,0 @@ -"use strict" -var [public, static] = [1, 23, ]; -var protected = [1, 2, 3]; -var [a, b, c] = [...protected]; -var [[public, package]] = [[1, [2, 3]]]; -var [...implements] = [[]]; diff --git a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts b/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts deleted file mode 100644 index 2429037b4a8a7..0000000000000 --- a/tests/cases/conformance/expressions/arrayLiterals/arrayLiterals5.ts +++ /dev/null @@ -1,3 +0,0 @@ -var [while, for] = [1, 3, ]; -var [for, as] = [, , , , ]; -var [...break] = [...["hello"]]; From db3705f5d65b51653e9bb7eddb5566de0acf8989 Mon Sep 17 00:00:00 2001 From: Yui T Date: Thu, 16 Apr 2015 16:17:28 -0700 Subject: [PATCH 3/3] Update baselines from merge master --- .../reference/arrayLiterals2ES5.symbols | 134 ++++++++++++++++++ .../reference/arrayLiterals2ES5.types | 41 ++++++ .../reference/arrayLiterals2ES6.symbols | 126 ++++++++++++++++ .../reference/arrayLiterals2ES6.types | 40 ++++++ 4 files changed, 341 insertions(+) create mode 100644 tests/baselines/reference/arrayLiterals2ES5.symbols create mode 100644 tests/baselines/reference/arrayLiterals2ES6.symbols diff --git a/tests/baselines/reference/arrayLiterals2ES5.symbols b/tests/baselines/reference/arrayLiterals2ES5.symbols new file mode 100644 index 0000000000000..c69b79de2724d --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES5.symbols @@ -0,0 +1,134 @@ +=== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES5.ts === +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [,, 2, 3, 4] +>a0 : Symbol(a0, Decl(arrayLiterals2ES5.ts, 9, 3)) + +var a1 = ["hello", "world"] +>a1 : Symbol(a1, Decl(arrayLiterals2ES5.ts, 10, 3)) + +var a2 = [, , , ...a0, "hello"]; +>a2 : Symbol(a2, Decl(arrayLiterals2ES5.ts, 11, 3)) +>a0 : Symbol(a0, Decl(arrayLiterals2ES5.ts, 9, 3)) + +var a3 = [,, ...a0] +>a3 : Symbol(a3, Decl(arrayLiterals2ES5.ts, 12, 3)) +>a0 : Symbol(a0, Decl(arrayLiterals2ES5.ts, 9, 3)) + +var a4 = [() => 1, ]; +>a4 : Symbol(a4, Decl(arrayLiterals2ES5.ts, 13, 3)) + +var a5 = [...a0, , ] +>a5 : Symbol(a5, Decl(arrayLiterals2ES5.ts, 14, 3)) +>a0 : Symbol(a0, Decl(arrayLiterals2ES5.ts, 9, 3)) + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +>b0 : Symbol(b0, Decl(arrayLiterals2ES5.ts, 25, 3)) +>undefined : Symbol(undefined) +>undefined : Symbol(undefined) + +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>b1 : Symbol(b1, Decl(arrayLiterals2ES5.ts, 26, 3)) + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +>c0 : Symbol(c0, Decl(arrayLiterals2ES5.ts, 32, 5)) +>c1 : Symbol(c1, Decl(arrayLiterals2ES5.ts, 32, 8)) + +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] +>c2 : Symbol(c2, Decl(arrayLiterals2ES5.ts, 33, 5)) +>c3 : Symbol(c3, Decl(arrayLiterals2ES5.ts, 33, 8)) + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +>temp : Symbol(temp, Decl(arrayLiterals2ES5.ts, 38, 3)) + +var temp1 = [1, 2, 3]; +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES5.ts, 39, 3)) + +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>temp2 : Symbol(temp2, Decl(arrayLiterals2ES5.ts, 40, 3)) + +var temp3 = [undefined, null, undefined]; +>temp3 : Symbol(temp3, Decl(arrayLiterals2ES5.ts, 41, 3)) +>undefined : Symbol(undefined) +>undefined : Symbol(undefined) + +var temp4 = []; +>temp4 : Symbol(temp4, Decl(arrayLiterals2ES5.ts, 42, 3)) + +interface myArray extends Array { } +>myArray : Symbol(myArray, Decl(arrayLiterals2ES5.ts, 42, 15)) +>Array : Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) +>Number : Symbol(Number, Decl(lib.d.ts, 456, 40), Decl(lib.d.ts, 518, 11)) + +interface myArray2 extends Array { } +>myArray2 : Symbol(myArray2, Decl(arrayLiterals2ES5.ts, 44, 43)) +>Array : Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) +>Number : Symbol(Number, Decl(lib.d.ts, 456, 40), Decl(lib.d.ts, 518, 11)) +>String : Symbol(String, Decl(lib.d.ts, 275, 1), Decl(lib.d.ts, 443, 11)) + +var d0 = [1, true, ...temp,]; // has type (string|number|boolean)[] +>d0 : Symbol(d0, Decl(arrayLiterals2ES5.ts, 46, 3)) +>temp : Symbol(temp, Decl(arrayLiterals2ES5.ts, 38, 3)) + +var d1 = [...temp]; // has type string[] +>d1 : Symbol(d1, Decl(arrayLiterals2ES5.ts, 47, 3)) +>temp : Symbol(temp, Decl(arrayLiterals2ES5.ts, 38, 3)) + +var d2: number[] = [...temp1]; +>d2 : Symbol(d2, Decl(arrayLiterals2ES5.ts, 48, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES5.ts, 39, 3)) + +var d3: myArray = [...temp1]; +>d3 : Symbol(d3, Decl(arrayLiterals2ES5.ts, 49, 3)) +>myArray : Symbol(myArray, Decl(arrayLiterals2ES5.ts, 42, 15)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES5.ts, 39, 3)) + +var d4: myArray2 = [...temp, ...temp1]; +>d4 : Symbol(d4, Decl(arrayLiterals2ES5.ts, 50, 3)) +>myArray2 : Symbol(myArray2, Decl(arrayLiterals2ES5.ts, 44, 43)) +>temp : Symbol(temp, Decl(arrayLiterals2ES5.ts, 38, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES5.ts, 39, 3)) + +var d5 = [...temp3]; +>d5 : Symbol(d5, Decl(arrayLiterals2ES5.ts, 51, 3)) +>temp3 : Symbol(temp3, Decl(arrayLiterals2ES5.ts, 41, 3)) + +var d6 = [...temp4]; +>d6 : Symbol(d6, Decl(arrayLiterals2ES5.ts, 52, 3)) +>temp4 : Symbol(temp4, Decl(arrayLiterals2ES5.ts, 42, 3)) + +var d7 = [...[...temp1]]; +>d7 : Symbol(d7, Decl(arrayLiterals2ES5.ts, 53, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES5.ts, 39, 3)) + +var d8: number[][] = [[...temp1]] +>d8 : Symbol(d8, Decl(arrayLiterals2ES5.ts, 54, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES5.ts, 39, 3)) + +var d9 = [[...temp1], ...["hello"]]; +>d9 : Symbol(d9, Decl(arrayLiterals2ES5.ts, 55, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES5.ts, 39, 3)) + diff --git a/tests/baselines/reference/arrayLiterals2ES5.types b/tests/baselines/reference/arrayLiterals2ES5.types index cd55e4ea51401..6eae997f4654c 100644 --- a/tests/baselines/reference/arrayLiterals2ES5.types +++ b/tests/baselines/reference/arrayLiterals2ES5.types @@ -11,20 +11,33 @@ var a0 = [,, 2, 3, 4] >a0 : number[] >[,, 2, 3, 4] : number[] +> : undefined +> : undefined +>2 : number +>3 : number +>4 : number var a1 = ["hello", "world"] >a1 : string[] >["hello", "world"] : string[] +>"hello" : string +>"world" : string var a2 = [, , , ...a0, "hello"]; >a2 : (string | number)[] >[, , , ...a0, "hello"] : (string | number)[] +> : undefined +> : undefined +> : undefined >...a0 : number >a0 : number[] +>"hello" : string var a3 = [,, ...a0] >a3 : number[] >[,, ...a0] : number[] +> : undefined +> : undefined >...a0 : number >a0 : number[] @@ -32,12 +45,14 @@ var a4 = [() => 1, ]; >a4 : (() => number)[] >[() => 1, ] : (() => number)[] >() => 1 : () => number +>1 : number var a5 = [...a0, , ] >a5 : number[] >[...a0, , ] : number[] >...a0 : number >a0 : number[] +> : undefined // Each element expression in a non-empty array literal is processed as follows: // - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) @@ -52,13 +67,19 @@ var b0: [any, any, any] = [undefined, null, undefined]; >b0 : [any, any, any] >[undefined, null, undefined] : [undefined, null, undefined] >undefined : undefined +>null : null >undefined : undefined var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; >b1 : [number[], string[]] >[[1, 2, 3], ["hello", "string"]] : [number[], string[]] >[1, 2, 3] : number[] +>1 : number +>2 : number +>3 : number >["hello", "string"] : string[] +>"hello" : string +>"string" : string // The resulting type an array literal expression is determined as follows: // - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), @@ -68,11 +89,16 @@ var [c0, c1] = [1, 2]; // tuple type [number, number] >c0 : number >c1 : number >[1, 2] : [number, number] +>1 : number +>2 : number var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] >c2 : number >c3 : number >[1, 2, true] : [number, number, boolean] +>1 : number +>2 : number +>true : boolean // The resulting type an array literal expression is determined as follows: // - the resulting type is an array type with an element type that is the union of the types of the @@ -80,21 +106,33 @@ var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] var temp = ["s", "t", "r"]; >temp : string[] >["s", "t", "r"] : string[] +>"s" : string +>"t" : string +>"r" : string var temp1 = [1, 2, 3]; >temp1 : number[] >[1, 2, 3] : number[] +>1 : number +>2 : number +>3 : number var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; >temp2 : [number[], string[]] >[[1, 2, 3], ["hello", "string"]] : [number[], string[]] >[1, 2, 3] : number[] +>1 : number +>2 : number +>3 : number >["hello", "string"] : string[] +>"hello" : string +>"string" : string var temp3 = [undefined, null, undefined]; >temp3 : any[] >[undefined, null, undefined] : null[] >undefined : undefined +>null : null >undefined : undefined var temp4 = []; @@ -115,6 +153,8 @@ interface myArray2 extends Array { } var d0 = [1, true, ...temp,]; // has type (string|number|boolean)[] >d0 : (string | number | boolean)[] >[1, true, ...temp,] : (string | number | boolean)[] +>1 : number +>true : boolean >...temp : string >temp : string[] @@ -181,4 +221,5 @@ var d9 = [[...temp1], ...["hello"]]; >temp1 : number[] >...["hello"] : string >["hello"] : string[] +>"hello" : string diff --git a/tests/baselines/reference/arrayLiterals2ES6.symbols b/tests/baselines/reference/arrayLiterals2ES6.symbols new file mode 100644 index 0000000000000..6367bd99f5599 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals2ES6.symbols @@ -0,0 +1,126 @@ +=== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals2ES6.ts === +// ElementList: ( Modified ) +// Elisionopt AssignmentExpression +// Elisionopt SpreadElement +// ElementList, Elisionopt AssignmentExpression +// ElementList, Elisionopt SpreadElement + +// SpreadElement: +// ... AssignmentExpression + +var a0 = [, , 2, 3, 4] +>a0 : Symbol(a0, Decl(arrayLiterals2ES6.ts, 9, 3)) + +var a1 = ["hello", "world"] +>a1 : Symbol(a1, Decl(arrayLiterals2ES6.ts, 10, 3)) + +var a2 = [, , , ...a0, "hello"]; +>a2 : Symbol(a2, Decl(arrayLiterals2ES6.ts, 11, 3)) +>a0 : Symbol(a0, Decl(arrayLiterals2ES6.ts, 9, 3)) + +var a3 = [, , ...a0] +>a3 : Symbol(a3, Decl(arrayLiterals2ES6.ts, 12, 3)) +>a0 : Symbol(a0, Decl(arrayLiterals2ES6.ts, 9, 3)) + +var a4 = [() => 1, ]; +>a4 : Symbol(a4, Decl(arrayLiterals2ES6.ts, 13, 3)) + +var a5 = [...a0, , ] +>a5 : Symbol(a5, Decl(arrayLiterals2ES6.ts, 14, 3)) +>a0 : Symbol(a0, Decl(arrayLiterals2ES6.ts, 9, 3)) + +// Each element expression in a non-empty array literal is processed as follows: +// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) +// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal, +// the element expression is contextually typed by the type of that property. + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is contextually typed by a tuple-like type, +// the resulting type is a tuple type constructed from the types of the element expressions. + +var b0: [any, any, any] = [undefined, null, undefined]; +>b0 : Symbol(b0, Decl(arrayLiterals2ES6.ts, 25, 3)) +>undefined : Symbol(undefined) +>undefined : Symbol(undefined) + +var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>b1 : Symbol(b1, Decl(arrayLiterals2ES6.ts, 26, 3)) + +// The resulting type an array literal expression is determined as follows: +// - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), +// the resulting type is a tuple type constructed from the types of the element expressions. + +var [c0, c1] = [1, 2]; // tuple type [number, number] +>c0 : Symbol(c0, Decl(arrayLiterals2ES6.ts, 32, 5)) +>c1 : Symbol(c1, Decl(arrayLiterals2ES6.ts, 32, 8)) + +var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] +>c2 : Symbol(c2, Decl(arrayLiterals2ES6.ts, 33, 5)) +>c3 : Symbol(c3, Decl(arrayLiterals2ES6.ts, 33, 8)) + +// The resulting type an array literal expression is determined as follows: +// - the resulting type is an array type with an element type that is the union of the types of the +// non - spread element expressions and the numeric index signature types of the spread element expressions +var temp = ["s", "t", "r"]; +>temp : Symbol(temp, Decl(arrayLiterals2ES6.ts, 38, 3)) + +var temp1 = [1, 2, 3]; +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES6.ts, 39, 3)) + +var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; +>temp2 : Symbol(temp2, Decl(arrayLiterals2ES6.ts, 40, 3)) + +interface myArray extends Array { } +>myArray : Symbol(myArray, Decl(arrayLiterals2ES6.ts, 40, 67)) +>Array : Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11), Decl(lib.d.ts, 1409, 1)) +>Number : Symbol(Number, Decl(lib.d.ts, 456, 40), Decl(lib.d.ts, 518, 11)) + +interface myArray2 extends Array { } +>myArray2 : Symbol(myArray2, Decl(arrayLiterals2ES6.ts, 42, 43)) +>Array : Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11), Decl(lib.d.ts, 1409, 1)) +>Number : Symbol(Number, Decl(lib.d.ts, 456, 40), Decl(lib.d.ts, 518, 11)) +>String : Symbol(String, Decl(lib.d.ts, 275, 1), Decl(lib.d.ts, 443, 11), Decl(lib.d.ts, 1508, 1)) + +var d0 = [1, true, ...temp, ]; // has type (string|number|boolean)[] +>d0 : Symbol(d0, Decl(arrayLiterals2ES6.ts, 44, 3)) +>temp : Symbol(temp, Decl(arrayLiterals2ES6.ts, 38, 3)) + +var d1 = [...temp]; // has type string[] +>d1 : Symbol(d1, Decl(arrayLiterals2ES6.ts, 45, 3)) +>temp : Symbol(temp, Decl(arrayLiterals2ES6.ts, 38, 3)) + +var d2: number[] = [...temp1]; +>d2 : Symbol(d2, Decl(arrayLiterals2ES6.ts, 46, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES6.ts, 39, 3)) + +var d3: myArray = [...temp1]; +>d3 : Symbol(d3, Decl(arrayLiterals2ES6.ts, 47, 3)) +>myArray : Symbol(myArray, Decl(arrayLiterals2ES6.ts, 40, 67)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES6.ts, 39, 3)) + +var d4: myArray2 = [...temp, ...temp1]; +>d4 : Symbol(d4, Decl(arrayLiterals2ES6.ts, 48, 3)) +>myArray2 : Symbol(myArray2, Decl(arrayLiterals2ES6.ts, 42, 43)) +>temp : Symbol(temp, Decl(arrayLiterals2ES6.ts, 38, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES6.ts, 39, 3)) + +var d5 = [...a2]; +>d5 : Symbol(d5, Decl(arrayLiterals2ES6.ts, 49, 3)) +>a2 : Symbol(a2, Decl(arrayLiterals2ES6.ts, 11, 3)) + +var d6 = [...a3]; +>d6 : Symbol(d6, Decl(arrayLiterals2ES6.ts, 50, 3)) +>a3 : Symbol(a3, Decl(arrayLiterals2ES6.ts, 12, 3)) + +var d7 = [...a4]; +>d7 : Symbol(d7, Decl(arrayLiterals2ES6.ts, 51, 3)) +>a4 : Symbol(a4, Decl(arrayLiterals2ES6.ts, 13, 3)) + +var d8: number[][] = [[...temp1]] +>d8 : Symbol(d8, Decl(arrayLiterals2ES6.ts, 52, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES6.ts, 39, 3)) + +var d9 = [[...temp1], ...["hello"]]; +>d9 : Symbol(d9, Decl(arrayLiterals2ES6.ts, 53, 3)) +>temp1 : Symbol(temp1, Decl(arrayLiterals2ES6.ts, 39, 3)) + diff --git a/tests/baselines/reference/arrayLiterals2ES6.types b/tests/baselines/reference/arrayLiterals2ES6.types index 0ae1487d190c9..f05b0ca9282a6 100644 --- a/tests/baselines/reference/arrayLiterals2ES6.types +++ b/tests/baselines/reference/arrayLiterals2ES6.types @@ -11,20 +11,33 @@ var a0 = [, , 2, 3, 4] >a0 : number[] >[, , 2, 3, 4] : number[] +> : undefined +> : undefined +>2 : number +>3 : number +>4 : number var a1 = ["hello", "world"] >a1 : string[] >["hello", "world"] : string[] +>"hello" : string +>"world" : string var a2 = [, , , ...a0, "hello"]; >a2 : (string | number)[] >[, , , ...a0, "hello"] : (string | number)[] +> : undefined +> : undefined +> : undefined >...a0 : number >a0 : number[] +>"hello" : string var a3 = [, , ...a0] >a3 : number[] >[, , ...a0] : number[] +> : undefined +> : undefined >...a0 : number >a0 : number[] @@ -32,12 +45,14 @@ var a4 = [() => 1, ]; >a4 : (() => number)[] >[() => 1, ] : (() => number)[] >() => 1 : () => number +>1 : number var a5 = [...a0, , ] >a5 : number[] >[...a0, , ] : number[] >...a0 : number >a0 : number[] +> : undefined // Each element expression in a non-empty array literal is processed as follows: // - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19) @@ -52,13 +67,19 @@ var b0: [any, any, any] = [undefined, null, undefined]; >b0 : [any, any, any] >[undefined, null, undefined] : [undefined, null, undefined] >undefined : undefined +>null : null >undefined : undefined var b1: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; >b1 : [number[], string[]] >[[1, 2, 3], ["hello", "string"]] : [number[], string[]] >[1, 2, 3] : number[] +>1 : number +>2 : number +>3 : number >["hello", "string"] : string[] +>"hello" : string +>"string" : string // The resulting type an array literal expression is determined as follows: // - If the array literal contains no spread elements and is an array assignment pattern in a destructuring assignment (section 4.17.1), @@ -68,11 +89,16 @@ var [c0, c1] = [1, 2]; // tuple type [number, number] >c0 : number >c1 : number >[1, 2] : [number, number] +>1 : number +>2 : number var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] >c2 : number >c3 : number >[1, 2, true] : [number, number, boolean] +>1 : number +>2 : number +>true : boolean // The resulting type an array literal expression is determined as follows: // - the resulting type is an array type with an element type that is the union of the types of the @@ -80,16 +106,27 @@ var [c2, c3] = [1, 2, true]; // tuple type [number, number, boolean] var temp = ["s", "t", "r"]; >temp : string[] >["s", "t", "r"] : string[] +>"s" : string +>"t" : string +>"r" : string var temp1 = [1, 2, 3]; >temp1 : number[] >[1, 2, 3] : number[] +>1 : number +>2 : number +>3 : number var temp2: [number[], string[]] = [[1, 2, 3], ["hello", "string"]]; >temp2 : [number[], string[]] >[[1, 2, 3], ["hello", "string"]] : [number[], string[]] >[1, 2, 3] : number[] +>1 : number +>2 : number +>3 : number >["hello", "string"] : string[] +>"hello" : string +>"string" : string interface myArray extends Array { } >myArray : myArray @@ -105,6 +142,8 @@ interface myArray2 extends Array { } var d0 = [1, true, ...temp, ]; // has type (string|number|boolean)[] >d0 : (string | number | boolean)[] >[1, true, ...temp, ] : (string | number | boolean)[] +>1 : number +>true : boolean >...temp : string >temp : string[] @@ -169,4 +208,5 @@ var d9 = [[...temp1], ...["hello"]]; >temp1 : number[] >...["hello"] : string >["hello"] : string[] +>"hello" : string