diff --git a/tests/baselines/reference/castingTuple.errors.txt b/tests/baselines/reference/castingTuple.errors.txt index f4efed6f1d1..98be259964d 100644 --- a/tests/baselines/reference/castingTuple.errors.txt +++ b/tests/baselines/reference/castingTuple.errors.txt @@ -2,19 +2,19 @@ tests/cases/conformance/types/tuple/castingTuple.ts(13,23): error TS2352: Neithe Property '2' is missing in type '[number, string]'. tests/cases/conformance/types/tuple/castingTuple.ts(16,21): error TS2352: Neither type '[C, D]' nor type '[C, D, A]' is assignable to the other. Property '2' is missing in type '[C, D]'. -tests/cases/conformance/types/tuple/castingTuple.ts(24,10): error TS2352: Neither type '[number, string]' nor type '[number, number]' is assignable to the other. +tests/cases/conformance/types/tuple/castingTuple.ts(28,10): error TS2352: Neither type '[number, string]' nor type '[number, number]' is assignable to the other. Types of property '1' are incompatible. Type 'string' is not assignable to type 'number'. -tests/cases/conformance/types/tuple/castingTuple.ts(25,10): error TS2352: Neither type '[C, D]' nor type '[A, I]' is assignable to the other. +tests/cases/conformance/types/tuple/castingTuple.ts(29,10): error TS2352: Neither type '[C, D]' nor type '[A, I]' is assignable to the other. Types of property '0' are incompatible. Type 'C' is not assignable to type 'A'. -tests/cases/conformance/types/tuple/castingTuple.ts(26,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'array1' must be of type '{}[]', but here has type 'number[]'. -tests/cases/conformance/types/tuple/castingTuple.ts(26,14): error TS2352: Neither type '[number, string]' nor type 'number[]' is assignable to the other. +tests/cases/conformance/types/tuple/castingTuple.ts(30,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'array1' must be of type '{}[]', but here has type 'number[]'. +tests/cases/conformance/types/tuple/castingTuple.ts(30,14): error TS2352: Neither type '[number, string]' nor type 'number[]' is assignable to the other. Types of property 'pop' are incompatible. Type '() => string | number' is not assignable to type '() => number'. Type 'string | number' is not assignable to type 'number'. Type 'string' is not assignable to type 'number'. -tests/cases/conformance/types/tuple/castingTuple.ts(27,1): error TS2304: Cannot find name 't4'. +tests/cases/conformance/types/tuple/castingTuple.ts(31,1): error TS2304: Cannot find name 't4'. ==== tests/cases/conformance/types/tuple/castingTuple.ts (7 errors) ==== @@ -41,10 +41,14 @@ tests/cases/conformance/types/tuple/castingTuple.ts(27,1): error TS2304: Cannot !!! error TS2352: Neither type '[C, D]' nor type '[C, D, A]' is assignable to the other. !!! error TS2352: Property '2' is missing in type '[C, D]'. var eleFromCDA1 = classCDATuple[2]; // A - var eleFromCDA2 = classCDATuple[5]; // {} + var eleFromCDA2 = classCDATuple[5]; // C | D | A var t10: [E1, E2] = [E1.one, E2.one]; var t11 = <[number, number]>t10; var array1 = <{}[]>emptyObjTuple; + var unionTuple: [C, string | number] = [new C(), "foo"]; + var unionTuple2: [C, string | number, D] = [new C(), "foo", new D()]; + var unionTuple3: [number, string| number] = [10, "foo"]; + var unionTuple4 = <[number, number]>unionTuple3; // error var t3 = <[number, number]>numStrTuple; @@ -68,4 +72,5 @@ tests/cases/conformance/types/tuple/castingTuple.ts(27,1): error TS2304: Cannot !!! error TS2352: Type 'string' is not assignable to type 'number'. t4[2] = 10; ~~ -!!! error TS2304: Cannot find name 't4'. \ No newline at end of file +!!! error TS2304: Cannot find name 't4'. + \ No newline at end of file diff --git a/tests/baselines/reference/castingTuple.js b/tests/baselines/reference/castingTuple.js index 0671062bb4e..fffadcbc070 100644 --- a/tests/baselines/reference/castingTuple.js +++ b/tests/baselines/reference/castingTuple.js @@ -16,16 +16,21 @@ var classCDTuple: [C, D] = [new C(), new D()]; var interfaceIITuple = <[I, I]>classCDTuple; var classCDATuple = <[C, D, A]>classCDTuple; var eleFromCDA1 = classCDATuple[2]; // A -var eleFromCDA2 = classCDATuple[5]; // {} +var eleFromCDA2 = classCDATuple[5]; // C | D | A var t10: [E1, E2] = [E1.one, E2.one]; var t11 = <[number, number]>t10; var array1 = <{}[]>emptyObjTuple; +var unionTuple: [C, string | number] = [new C(), "foo"]; +var unionTuple2: [C, string | number, D] = [new C(), "foo", new D()]; +var unionTuple3: [number, string| number] = [10, "foo"]; +var unionTuple4 = <[number, number]>unionTuple3; // error var t3 = <[number, number]>numStrTuple; var t9 = <[A, I]>classCDTuple; var array1 = numStrTuple; -t4[2] = 10; +t4[2] = 10; + //// [castingTuple.js] var __extends = this.__extends || function (d, b) { @@ -84,10 +89,14 @@ var classCDTuple = [new C(), new D()]; var interfaceIITuple = classCDTuple; var classCDATuple = classCDTuple; var eleFromCDA1 = classCDATuple[2]; // A -var eleFromCDA2 = classCDATuple[5]; // {} +var eleFromCDA2 = classCDATuple[5]; // C | D | A var t10 = [0 /* one */, 0 /* one */]; var t11 = t10; var array1 = emptyObjTuple; +var unionTuple = [new C(), "foo"]; +var unionTuple2 = [new C(), "foo", new D()]; +var unionTuple3 = [10, "foo"]; +var unionTuple4 = unionTuple3; // error var t3 = numStrTuple; var t9 = classCDTuple; diff --git a/tests/baselines/reference/contextualTypeWithTuple.errors.txt b/tests/baselines/reference/contextualTypeWithTuple.errors.txt index d093e176455..32e368b0f88 100644 --- a/tests/baselines/reference/contextualTypeWithTuple.errors.txt +++ b/tests/baselines/reference/contextualTypeWithTuple.errors.txt @@ -4,21 +4,27 @@ tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(3,5): error TS232 Type 'string | number | boolean' is not assignable to type 'string | number'. Type 'boolean' is not assignable to type 'string | number'. Type 'boolean' is not assignable to type 'number'. -tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(8,1): error TS2323: Type '[number, string, boolean]' is not assignable to type '[number, string]'. -tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(11,1): error TS2323: Type '[{}, number]' is not assignable to type '[{ a: string; }, number]'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(15,1): error TS2323: Type '[number, string, boolean]' is not assignable to type '[number, string]'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(18,1): error TS2323: Type '[{}, number]' is not assignable to type '[{ a: string; }, number]'. Types of property '0' are incompatible. Type '{}' is not assignable to type '{ a: string; }'. Property 'a' is missing in type '{}'. -tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(12,1): error TS2323: Type '[number, string]' is not assignable to type '[number, string, boolean]'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(19,1): error TS2323: Type '[number, string]' is not assignable to type '[number, string, boolean]'. Property '2' is missing in type '[number, string]'. -tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(13,5): error TS2323: Type '[string, string, number]' is not assignable to type '[string, string]'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(20,5): error TS2323: Type '[string, string, number]' is not assignable to type '[string, string]'. Types of property 'pop' are incompatible. Type '() => string | number' is not assignable to type '() => string'. Type 'string | number' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(24,1): error TS2323: Type '[C, string | number]' is not assignable to type '[C, string | number, D]'. + Property '2' is missing in type '[C, string | number]'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(25,1): error TS2323: Type '[number, string | number]' is not assignable to type '[number, string]'. + Types of property '1' are incompatible. + Type 'string | number' is not assignable to type 'string'. + Type 'number' is not assignable to type 'string'. -==== tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts (5 errors) ==== +==== tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts (7 errors) ==== // no error var numStrTuple: [number, string] = [5, "hello"]; var numStrTuple2: [number, string] = [5, "foo", true]; @@ -32,6 +38,13 @@ tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(13,5): error TS23 var numStrBoolTuple: [number, string, boolean] = [5, "foo", true]; var objNumTuple: [{ a: string }, number] = [{ a: "world" }, 5]; var strTupleTuple: [string, [number, {}]] = ["bar", [5, { x: 1, y: 1 }]]; + class C { } + class D { } + var unionTuple: [C, string | number] = [new C(), "foo"]; + var unionTuple1: [C, string | number] = [new C(), "foo"]; + var unionTuple2: [C, string | number, D] = [new C(), "foo", new D()]; + var unionTuple3: [number, string| number] = [10, "foo"]; + numStrTuple = numStrTuple2; numStrTuple = numStrBoolTuple; ~~~~~~~~~~~ @@ -55,4 +68,16 @@ tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(13,5): error TS23 !!! error TS2323: Type '() => string | number' is not assignable to type '() => string'. !!! error TS2323: Type 'string | number' is not assignable to type 'string'. !!! error TS2323: Type 'number' is not assignable to type 'string'. - \ No newline at end of file + + unionTuple = unionTuple1; + unionTuple = unionTuple2; + unionTuple2 = unionTuple; + ~~~~~~~~~~~ +!!! error TS2323: Type '[C, string | number]' is not assignable to type '[C, string | number, D]'. +!!! error TS2323: Property '2' is missing in type '[C, string | number]'. + numStrTuple = unionTuple3; + ~~~~~~~~~~~ +!!! error TS2323: Type '[number, string | number]' is not assignable to type '[number, string]'. +!!! error TS2323: Types of property '1' are incompatible. +!!! error TS2323: Type 'string | number' is not assignable to type 'string'. +!!! error TS2323: Type 'number' is not assignable to type 'string'. \ No newline at end of file diff --git a/tests/baselines/reference/contextualTypeWithTuple.js b/tests/baselines/reference/contextualTypeWithTuple.js index 61a2df5d8ce..cfcdd13f7d0 100644 --- a/tests/baselines/reference/contextualTypeWithTuple.js +++ b/tests/baselines/reference/contextualTypeWithTuple.js @@ -5,6 +5,13 @@ var numStrTuple2: [number, string] = [5, "foo", true]; var numStrBoolTuple: [number, string, boolean] = [5, "foo", true]; var objNumTuple: [{ a: string }, number] = [{ a: "world" }, 5]; var strTupleTuple: [string, [number, {}]] = ["bar", [5, { x: 1, y: 1 }]]; +class C { } +class D { } +var unionTuple: [C, string | number] = [new C(), "foo"]; +var unionTuple1: [C, string | number] = [new C(), "foo"]; +var unionTuple2: [C, string | number, D] = [new C(), "foo", new D()]; +var unionTuple3: [number, string| number] = [10, "foo"]; + numStrTuple = numStrTuple2; numStrTuple = numStrBoolTuple; @@ -12,7 +19,11 @@ numStrTuple = numStrBoolTuple; objNumTuple = [ {}, 5]; numStrBoolTuple = numStrTuple; var strStrTuple: [string, string] = ["foo", "bar", 5]; - + +unionTuple = unionTuple1; +unionTuple = unionTuple2; +unionTuple2 = unionTuple; +numStrTuple = unionTuple3; //// [contextualTypeWithTuple.js] // no error @@ -21,9 +32,27 @@ var numStrTuple2 = [5, "foo", true]; var numStrBoolTuple = [5, "foo", true]; var objNumTuple = [{ a: "world" }, 5]; var strTupleTuple = ["bar", [5, { x: 1, y: 1 }]]; +var C = (function () { + function C() { + } + return C; +})(); +var D = (function () { + function D() { + } + return D; +})(); +var unionTuple = [new C(), "foo"]; +var unionTuple1 = [new C(), "foo"]; +var unionTuple2 = [new C(), "foo", new D()]; +var unionTuple3 = [10, "foo"]; numStrTuple = numStrTuple2; numStrTuple = numStrBoolTuple; // error objNumTuple = [{}, 5]; numStrBoolTuple = numStrTuple; var strStrTuple = ["foo", "bar", 5]; +unionTuple = unionTuple1; +unionTuple = unionTuple2; +unionTuple2 = unionTuple; +numStrTuple = unionTuple3; diff --git a/tests/baselines/reference/indexerWithTuple.js b/tests/baselines/reference/indexerWithTuple.js index fc82716ba05..91d90792e6d 100644 --- a/tests/baselines/reference/indexerWithTuple.js +++ b/tests/baselines/reference/indexerWithTuple.js @@ -1,32 +1,65 @@ //// [indexerWithTuple.ts] var strNumTuple: [string, number] = ["foo", 10]; var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; +var unionTuple1: [number, string| number] = [10, "foo"]; +var unionTuple2: [boolean, string| number] = [true, "foo"]; // no error var idx0 = 0; var idx1 = 1; var ele10 = strNumTuple[0]; // string var ele11 = strNumTuple[1]; // number -var ele12 = strNumTuple[2]; // {} -var ele13 = strNumTuple[idx0]; // {} -var ele14 = strNumTuple[idx1]; // {} +var ele12 = strNumTuple[2]; // string | number +var ele13 = strNumTuple[idx0]; // string | number +var ele14 = strNumTuple[idx1]; // string | number var ele15 = strNumTuple["0"]; // string var ele16 = strNumTuple["1"]; // number var strNumTuple1 = numTupleTuple[1]; //[string, number]; -var ele17 = numTupleTuple[2]; // {} +var ele17 = numTupleTuple[2]; // number | [string, number] +var eleUnion10 = unionTuple1[0]; // number +var eleUnion11 = unionTuple1[1]; // string | number +var eleUnion12 = unionTuple1[2]; // string | number +var eleUnion13 = unionTuple1[idx0]; // string | number +var eleUnion14 = unionTuple1[idx1]; // string | number +var eleUnion15 = unionTuple1["0"]; // number +var eleUnion16 = unionTuple1["1"]; // string | number + +var eleUnion20 = unionTuple2[0]; // boolean +var eleUnion21 = unionTuple2[1]; // string | number +var eleUnion22 = unionTuple2[2]; // string | number | boolean +var eleUnion23 = unionTuple2[idx0]; // string | number | boolean +var eleUnion24 = unionTuple2[idx1]; // string | number | boolean +var eleUnion25 = unionTuple2["0"]; // boolean +var eleUnion26 = unionTuple2["1"]; // string | number //// [indexerWithTuple.js] var strNumTuple = ["foo", 10]; var numTupleTuple = [10, ["bar", 20]]; +var unionTuple1 = [10, "foo"]; +var unionTuple2 = [true, "foo"]; // no error var idx0 = 0; var idx1 = 1; var ele10 = strNumTuple[0]; // string var ele11 = strNumTuple[1]; // number -var ele12 = strNumTuple[2]; // {} -var ele13 = strNumTuple[idx0]; // {} -var ele14 = strNumTuple[idx1]; // {} +var ele12 = strNumTuple[2]; // string | number +var ele13 = strNumTuple[idx0]; // string | number +var ele14 = strNumTuple[idx1]; // string | number var ele15 = strNumTuple["0"]; // string var ele16 = strNumTuple["1"]; // number var strNumTuple1 = numTupleTuple[1]; //[string, number]; -var ele17 = numTupleTuple[2]; // {} +var ele17 = numTupleTuple[2]; // number | [string, number] +var eleUnion10 = unionTuple1[0]; // number +var eleUnion11 = unionTuple1[1]; // string | number +var eleUnion12 = unionTuple1[2]; // string | number +var eleUnion13 = unionTuple1[idx0]; // string | number +var eleUnion14 = unionTuple1[idx1]; // string | number +var eleUnion15 = unionTuple1["0"]; // number +var eleUnion16 = unionTuple1["1"]; // string | number +var eleUnion20 = unionTuple2[0]; // boolean +var eleUnion21 = unionTuple2[1]; // string | number +var eleUnion22 = unionTuple2[2]; // string | number | boolean +var eleUnion23 = unionTuple2[idx0]; // string | number | boolean +var eleUnion24 = unionTuple2[idx1]; // string | number | boolean +var eleUnion25 = unionTuple2["0"]; // boolean +var eleUnion26 = unionTuple2["1"]; // string | number diff --git a/tests/baselines/reference/indexerWithTuple.types b/tests/baselines/reference/indexerWithTuple.types index 28053a33081..75b89ca6088 100644 --- a/tests/baselines/reference/indexerWithTuple.types +++ b/tests/baselines/reference/indexerWithTuple.types @@ -8,6 +8,14 @@ var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; >[10, ["bar", 20]] : [number, [string, number]] >["bar", 20] : [string, number] +var unionTuple1: [number, string| number] = [10, "foo"]; +>unionTuple1 : [number, string | number] +>[10, "foo"] : [number, string] + +var unionTuple2: [boolean, string| number] = [true, "foo"]; +>unionTuple2 : [boolean, string | number] +>[true, "foo"] : [boolean, string] + // no error var idx0 = 0; >idx0 : number @@ -25,18 +33,18 @@ var ele11 = strNumTuple[1]; // number >strNumTuple[1] : number >strNumTuple : [string, number] -var ele12 = strNumTuple[2]; // {} +var ele12 = strNumTuple[2]; // string | number >ele12 : string | number >strNumTuple[2] : string | number >strNumTuple : [string, number] -var ele13 = strNumTuple[idx0]; // {} +var ele13 = strNumTuple[idx0]; // string | number >ele13 : string | number >strNumTuple[idx0] : string | number >strNumTuple : [string, number] >idx0 : number -var ele14 = strNumTuple[idx1]; // {} +var ele14 = strNumTuple[idx1]; // string | number >ele14 : string | number >strNumTuple[idx1] : string | number >strNumTuple : [string, number] @@ -57,8 +65,82 @@ var strNumTuple1 = numTupleTuple[1]; //[string, number]; >numTupleTuple[1] : [string, number] >numTupleTuple : [number, [string, number]] -var ele17 = numTupleTuple[2]; // {} +var ele17 = numTupleTuple[2]; // number | [string, number] >ele17 : number | [string, number] >numTupleTuple[2] : number | [string, number] >numTupleTuple : [number, [string, number]] +var eleUnion10 = unionTuple1[0]; // number +>eleUnion10 : number +>unionTuple1[0] : number +>unionTuple1 : [number, string | number] + +var eleUnion11 = unionTuple1[1]; // string | number +>eleUnion11 : string | number +>unionTuple1[1] : string | number +>unionTuple1 : [number, string | number] + +var eleUnion12 = unionTuple1[2]; // string | number +>eleUnion12 : string | number +>unionTuple1[2] : string | number +>unionTuple1 : [number, string | number] + +var eleUnion13 = unionTuple1[idx0]; // string | number +>eleUnion13 : string | number +>unionTuple1[idx0] : string | number +>unionTuple1 : [number, string | number] +>idx0 : number + +var eleUnion14 = unionTuple1[idx1]; // string | number +>eleUnion14 : string | number +>unionTuple1[idx1] : string | number +>unionTuple1 : [number, string | number] +>idx1 : number + +var eleUnion15 = unionTuple1["0"]; // number +>eleUnion15 : number +>unionTuple1["0"] : number +>unionTuple1 : [number, string | number] + +var eleUnion16 = unionTuple1["1"]; // string | number +>eleUnion16 : string | number +>unionTuple1["1"] : string | number +>unionTuple1 : [number, string | number] + +var eleUnion20 = unionTuple2[0]; // boolean +>eleUnion20 : boolean +>unionTuple2[0] : boolean +>unionTuple2 : [boolean, string | number] + +var eleUnion21 = unionTuple2[1]; // string | number +>eleUnion21 : string | number +>unionTuple2[1] : string | number +>unionTuple2 : [boolean, string | number] + +var eleUnion22 = unionTuple2[2]; // string | number | boolean +>eleUnion22 : string | number | boolean +>unionTuple2[2] : string | number | boolean +>unionTuple2 : [boolean, string | number] + +var eleUnion23 = unionTuple2[idx0]; // string | number | boolean +>eleUnion23 : string | number | boolean +>unionTuple2[idx0] : string | number | boolean +>unionTuple2 : [boolean, string | number] +>idx0 : number + +var eleUnion24 = unionTuple2[idx1]; // string | number | boolean +>eleUnion24 : string | number | boolean +>unionTuple2[idx1] : string | number | boolean +>unionTuple2 : [boolean, string | number] +>idx1 : number + +var eleUnion25 = unionTuple2["0"]; // boolean +>eleUnion25 : boolean +>unionTuple2["0"] : boolean +>unionTuple2 : [boolean, string | number] + +var eleUnion26 = unionTuple2["1"]; // string | number +>eleUnion26 : string | number +>unionTuple2["1"] : string | number +>unionTuple2 : [boolean, string | number] + diff --git a/tests/cases/conformance/types/tuple/castingTuple.ts b/tests/cases/conformance/types/tuple/castingTuple.ts index f154e5f00c8..cf5c58af346 100644 --- a/tests/cases/conformance/types/tuple/castingTuple.ts +++ b/tests/cases/conformance/types/tuple/castingTuple.ts @@ -15,13 +15,17 @@ var classCDTuple: [C, D] = [new C(), new D()]; var interfaceIITuple = <[I, I]>classCDTuple; var classCDATuple = <[C, D, A]>classCDTuple; var eleFromCDA1 = classCDATuple[2]; // A -var eleFromCDA2 = classCDATuple[5]; // {} +var eleFromCDA2 = classCDATuple[5]; // C | D | A var t10: [E1, E2] = [E1.one, E2.one]; var t11 = <[number, number]>t10; var array1 = <{}[]>emptyObjTuple; +var unionTuple: [C, string | number] = [new C(), "foo"]; +var unionTuple2: [C, string | number, D] = [new C(), "foo", new D()]; +var unionTuple3: [number, string| number] = [10, "foo"]; +var unionTuple4 = <[number, number]>unionTuple3; // error var t3 = <[number, number]>numStrTuple; var t9 = <[A, I]>classCDTuple; var array1 = numStrTuple; -t4[2] = 10; \ No newline at end of file +t4[2] = 10; diff --git a/tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts b/tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts index 7e9575d7f82..9600ebcd671 100644 --- a/tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts +++ b/tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts @@ -4,6 +4,13 @@ var numStrTuple2: [number, string] = [5, "foo", true]; var numStrBoolTuple: [number, string, boolean] = [5, "foo", true]; var objNumTuple: [{ a: string }, number] = [{ a: "world" }, 5]; var strTupleTuple: [string, [number, {}]] = ["bar", [5, { x: 1, y: 1 }]]; +class C { } +class D { } +var unionTuple: [C, string | number] = [new C(), "foo"]; +var unionTuple1: [C, string | number] = [new C(), "foo"]; +var unionTuple2: [C, string | number, D] = [new C(), "foo", new D()]; +var unionTuple3: [number, string| number] = [10, "foo"]; + numStrTuple = numStrTuple2; numStrTuple = numStrBoolTuple; @@ -11,3 +18,8 @@ numStrTuple = numStrBoolTuple; objNumTuple = [ {}, 5]; numStrBoolTuple = numStrTuple; var strStrTuple: [string, string] = ["foo", "bar", 5]; + +unionTuple = unionTuple1; +unionTuple = unionTuple2; +unionTuple2 = unionTuple; +numStrTuple = unionTuple3; \ No newline at end of file diff --git a/tests/cases/conformance/types/tuple/indexerWithTuple.ts b/tests/cases/conformance/types/tuple/indexerWithTuple.ts index 0b51ecd32ee..930ca56402c 100644 --- a/tests/cases/conformance/types/tuple/indexerWithTuple.ts +++ b/tests/cases/conformance/types/tuple/indexerWithTuple.ts @@ -1,15 +1,32 @@ var strNumTuple: [string, number] = ["foo", 10]; var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; +var unionTuple1: [number, string| number] = [10, "foo"]; +var unionTuple2: [boolean, string| number] = [true, "foo"]; // no error var idx0 = 0; var idx1 = 1; var ele10 = strNumTuple[0]; // string var ele11 = strNumTuple[1]; // number -var ele12 = strNumTuple[2]; // {} -var ele13 = strNumTuple[idx0]; // {} -var ele14 = strNumTuple[idx1]; // {} +var ele12 = strNumTuple[2]; // string | number +var ele13 = strNumTuple[idx0]; // string | number +var ele14 = strNumTuple[idx1]; // string | number var ele15 = strNumTuple["0"]; // string var ele16 = strNumTuple["1"]; // number var strNumTuple1 = numTupleTuple[1]; //[string, number]; -var ele17 = numTupleTuple[2]; // {} \ No newline at end of file +var ele17 = numTupleTuple[2]; // number | [string, number] +var eleUnion10 = unionTuple1[0]; // number +var eleUnion11 = unionTuple1[1]; // string | number +var eleUnion12 = unionTuple1[2]; // string | number +var eleUnion13 = unionTuple1[idx0]; // string | number +var eleUnion14 = unionTuple1[idx1]; // string | number +var eleUnion15 = unionTuple1["0"]; // number +var eleUnion16 = unionTuple1["1"]; // string | number + +var eleUnion20 = unionTuple2[0]; // boolean +var eleUnion21 = unionTuple2[1]; // string | number +var eleUnion22 = unionTuple2[2]; // string | number | boolean +var eleUnion23 = unionTuple2[idx0]; // string | number | boolean +var eleUnion24 = unionTuple2[idx1]; // string | number | boolean +var eleUnion25 = unionTuple2["0"]; // boolean +var eleUnion26 = unionTuple2["1"]; // string | number \ No newline at end of file