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 129 130 131 132 133 134 135 136 137 138 139
|
=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts ===
interface I<T, U> {
tuple1: [T, U];
>tuple1 : [T, U]
}
var i1: I<string, number>;
>i1 : I<string, number>
var i2: I<{}, {}>;
>i2 : I<{}, {}>
// no error
i1.tuple1 = ["foo", 5];
>i1.tuple1 = ["foo", 5] : [string, number]
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>["foo", 5] : [string, number]
>"foo" : "foo"
>5 : 5
var e1 = i1.tuple1[0]; // string
>e1 : string
>i1.tuple1[0] : string
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>0 : 0
var e2 = i1.tuple1[1]; // number
>e2 : number
>i1.tuple1[1] : number
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>1 : 1
i1.tuple1 = ["foo", 5, false, true];
>i1.tuple1 = ["foo", 5, false, true] : [string, number, boolean, boolean]
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>["foo", 5, false, true] : [string, number, boolean, boolean]
>"foo" : "foo"
>5 : 5
>false : false
>true : true
var e3 = i1.tuple1[2]; // {}
>e3 : undefined
>i1.tuple1[2] : undefined
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>2 : 2
i1.tuple1[3] = { a: "string" };
>i1.tuple1[3] = { a: "string" } : { a: string; }
>i1.tuple1[3] : undefined
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>3 : 3
>{ a: "string" } : { a: string; }
>a : string
>"string" : "string"
var e4 = i1.tuple1[3]; // {}
>e4 : undefined
>i1.tuple1[3] : undefined
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>3 : 3
i2.tuple1 = ["foo", 5];
>i2.tuple1 = ["foo", 5] : [string, number]
>i2.tuple1 : [{}, {}]
>i2 : I<{}, {}>
>tuple1 : [{}, {}]
>["foo", 5] : [string, number]
>"foo" : "foo"
>5 : 5
i2.tuple1 = ["foo", "bar"];
>i2.tuple1 = ["foo", "bar"] : [string, string]
>i2.tuple1 : [{}, {}]
>i2 : I<{}, {}>
>tuple1 : [{}, {}]
>["foo", "bar"] : [string, string]
>"foo" : "foo"
>"bar" : "bar"
i2.tuple1 = [5, "bar"];
>i2.tuple1 = [5, "bar"] : [number, string]
>i2.tuple1 : [{}, {}]
>i2 : I<{}, {}>
>tuple1 : [{}, {}]
>[5, "bar"] : [number, string]
>5 : 5
>"bar" : "bar"
i2.tuple1 = [{}, {}];
>i2.tuple1 = [{}, {}] : [{}, {}]
>i2.tuple1 : [{}, {}]
>i2 : I<{}, {}>
>tuple1 : [{}, {}]
>[{}, {}] : [{}, {}]
>{} : {}
>{} : {}
// error
i1.tuple1 = [5, "foo"];
>i1.tuple1 = [5, "foo"] : [number, string]
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>[5, "foo"] : [number, string]
>5 : 5
>"foo" : "foo"
i1.tuple1 = [{}, {}];
>i1.tuple1 = [{}, {}] : [{}, {}]
>i1.tuple1 : [string, number]
>i1 : I<string, number>
>tuple1 : [string, number]
>[{}, {}] : [{}, {}]
>{} : {}
>{} : {}
i2.tuple1 = [{}];
>i2.tuple1 = [{}] : [{}]
>i2.tuple1 : [{}, {}]
>i2 : I<{}, {}>
>tuple1 : [{}, {}]
>[{}] : [{}]
>{} : {}
|