1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
=== tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts ===
// no error
var numStrTuple: [number, string] = [5, "hello"];
>numStrTuple : [number, string]
>[5, "hello"] : [number, string]
>5 : 5
>"hello" : "hello"
var numStrTuple2: [number, string] = [5, "foo", true];
>numStrTuple2 : [number, string]
>[5, "foo", true] : [number, string, boolean]
>5 : 5
>"foo" : "foo"
>true : true
var numStrBoolTuple: [number, string, boolean] = [5, "foo", true];
>numStrBoolTuple : [number, string, boolean]
>[5, "foo", true] : [number, string, true]
>5 : 5
>"foo" : "foo"
>true : true
var objNumTuple: [{ a: string }, number] = [{ a: "world" }, 5];
>objNumTuple : [{ a: string; }, number]
>a : string
>[{ a: "world" }, 5] : [{ a: string; }, number]
>{ a: "world" } : { a: string; }
>a : string
>"world" : "world"
>5 : 5
var strTupleTuple: [string, [number, {}]] = ["bar", [5, { x: 1, y: 1 }]];
>strTupleTuple : [string, [number, {}]]
>["bar", [5, { x: 1, y: 1 }]] : [string, [number, { x: number; y: number; }]]
>"bar" : "bar"
>[5, { x: 1, y: 1 }] : [number, { x: number; y: number; }]
>5 : 5
>{ x: 1, y: 1 } : { x: number; y: number; }
>x : number
>1 : 1
>y : number
>1 : 1
class C { }
>C : C
class D { }
>D : D
var unionTuple: [C, string | number] = [new C(), "foo"];
>unionTuple : [C, string | number]
>[new C(), "foo"] : [C, string]
>new C() : C
>C : typeof C
>"foo" : "foo"
var unionTuple1: [C, string | number] = [new C(), "foo"];
>unionTuple1 : [C, string | number]
>[new C(), "foo"] : [C, string]
>new C() : C
>C : typeof C
>"foo" : "foo"
var unionTuple2: [C, string | number, D] = [new C(), "foo", new D()];
>unionTuple2 : [C, string | number, D]
>[new C(), "foo", new D()] : [C, string, D]
>new C() : C
>C : typeof C
>"foo" : "foo"
>new D() : D
>D : typeof D
var unionTuple3: [number, string| number] = [10, "foo"];
>unionTuple3 : [number, string | number]
>[10, "foo"] : [number, string]
>10 : 10
>"foo" : "foo"
numStrTuple = numStrTuple2;
>numStrTuple = numStrTuple2 : [number, string]
>numStrTuple : [number, string]
>numStrTuple2 : [number, string]
numStrTuple = numStrBoolTuple;
>numStrTuple = numStrBoolTuple : [number, string, boolean]
>numStrTuple : [number, string]
>numStrBoolTuple : [number, string, boolean]
// error
objNumTuple = [ {}, 5];
>objNumTuple = [ {}, 5] : [{}, number]
>objNumTuple : [{ a: string; }, number]
>[ {}, 5] : [{}, number]
>{} : {}
>5 : 5
numStrBoolTuple = numStrTuple;
>numStrBoolTuple = numStrTuple : [number, string]
>numStrBoolTuple : [number, string, boolean]
>numStrTuple : [number, string]
var strStrTuple: [string, string] = ["foo", "bar", 5];
>strStrTuple : [string, string]
>["foo", "bar", 5] : [string, string, number]
>"foo" : "foo"
>"bar" : "bar"
>5 : 5
unionTuple = unionTuple1;
>unionTuple = unionTuple1 : [C, string | number]
>unionTuple : [C, string | number]
>unionTuple1 : [C, string | number]
unionTuple = unionTuple2;
>unionTuple = unionTuple2 : [C, string | number, D]
>unionTuple : [C, string | number]
>unionTuple2 : [C, string | number, D]
unionTuple2 = unionTuple;
>unionTuple2 = unionTuple : [C, string | number]
>unionTuple2 : [C, string | number, D]
>unionTuple : [C, string | number]
numStrTuple = unionTuple3;
>numStrTuple = unionTuple3 : [number, string | number]
>numStrTuple : [number, string]
>unionTuple3 : [number, string | number]
|