File: tupleTypeInference2.types

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (79 lines) | stat: -rw-r--r-- 1,783 bytes parent folder | download | duplicates (4)
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[]