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
|
=== tests/cases/compiler/tupleTypeInference2.ts ===
// Repro from #22564
type A<R> = [R] | [R, string];
>A : A<R>
declare function f<T>(x: A<T>): T;
>f : <T>(x: A<T>) => T
>x : A<T>
f([undefined, ''] as [never, string]); // T: never
>f([undefined, ''] as [never, string]) : never
>f : <T>(x: A<T>) => T
>[undefined, ''] as [never, string] : [never, string]
>[undefined, ''] : [undefined, string]
>undefined : undefined
>'' : ""
f([undefined, ''] as [void, string]); // T: void
>f([undefined, ''] as [void, string]) : void
>f : <T>(x: A<T>) => T
>[undefined, ''] as [void, string] : [void, string]
>[undefined, ''] : [undefined, string]
>undefined : undefined
>'' : ""
// Repro from #22563
type B<R, S> = [R] | [R, S];
>B : B<R, S>
declare function g<T, U>(f: B<T, U>): U;
>g : <T, U>(f: B<T, U>) => U
>f : B<T, U>
g([[]] as [void[]]); // U: {}
>g([[]] as [void[]]) : unknown
>g : <T, U>(f: B<T, U>) => U
>[[]] as [void[]] : [void[]]
>[[]] : [never[]]
>[] : never[]
type C<R, S> = [R[]] | [R[], S];
>C : C<R, S>
declare function h<T, U>(f: C<T, U>): U;
>h : <T, U>(f: C<T, U>) => U
>f : C<T, U>
h([[]] as [void[]]); // U: {}
>h([[]] as [void[]]) : unknown
>h : <T, U>(f: C<T, U>) => U
>[[]] as [void[]] : [void[]]
>[[]] : [never[]]
>[] : never[]
// Repro from #22562
type C2<R> = [R[]] | [R[], void];
>C2 : C2<R>
declare function h2<T>(f: C2<T>): T;
>h2 : <T>(f: C2<T>) => T
>f : C2<T>
h2([[]] as [never[]]); // T: never
>h2([[]] as [never[]]) : never
>h2 : <T>(f: C2<T>) => T
>[[]] as [never[]] : [never[]]
>[[]] : [never[]]
>[] : never[]
h2([[]] as [void[]]); // T: void
>h2([[]] as [void[]]) : void
>h2 : <T>(f: C2<T>) => T
>[[]] as [void[]] : [void[]]
>[[]] : [never[]]
>[] : never[]
|