-
Notifications
You must be signed in to change notification settings - Fork 12.8k
/
Copy pathnonNullableReduction.symbols
61 lines (51 loc) · 2.65 KB
/
nonNullableReduction.symbols
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
=== tests/cases/compiler/nonNullableReduction.ts ===
// Repros from #43425
type Transform1<T> = ((value: string) => T) | (string extends T ? undefined : never);
>Transform1 : Symbol(Transform1, Decl(nonNullableReduction.ts, 0, 0))
>T : Symbol(T, Decl(nonNullableReduction.ts, 2, 16))
>value : Symbol(value, Decl(nonNullableReduction.ts, 2, 23))
>T : Symbol(T, Decl(nonNullableReduction.ts, 2, 16))
>T : Symbol(T, Decl(nonNullableReduction.ts, 2, 16))
type Transform2<T> = string extends T ? ((value: string) => T) | undefined : (value: string) => T;
>Transform2 : Symbol(Transform2, Decl(nonNullableReduction.ts, 2, 85))
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
>value : Symbol(value, Decl(nonNullableReduction.ts, 3, 42))
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
>value : Symbol(value, Decl(nonNullableReduction.ts, 3, 78))
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
function test<T>(f1: Transform1<T>, f2: Transform2<T>) {
>test : Symbol(test, Decl(nonNullableReduction.ts, 3, 98))
>T : Symbol(T, Decl(nonNullableReduction.ts, 5, 14))
>f1 : Symbol(f1, Decl(nonNullableReduction.ts, 5, 17))
>Transform1 : Symbol(Transform1, Decl(nonNullableReduction.ts, 0, 0))
>T : Symbol(T, Decl(nonNullableReduction.ts, 5, 14))
>f2 : Symbol(f2, Decl(nonNullableReduction.ts, 5, 35))
>Transform2 : Symbol(Transform2, Decl(nonNullableReduction.ts, 2, 85))
>T : Symbol(T, Decl(nonNullableReduction.ts, 5, 14))
f1?.("hello");
>f1 : Symbol(f1, Decl(nonNullableReduction.ts, 5, 17))
f2?.("hello");
>f2 : Symbol(f2, Decl(nonNullableReduction.ts, 5, 35))
}
function f1<T>(x: T | (string extends T ? null | undefined : never)) {
>f1 : Symbol(f1, Decl(nonNullableReduction.ts, 8, 1))
>T : Symbol(T, Decl(nonNullableReduction.ts, 10, 12))
>x : Symbol(x, Decl(nonNullableReduction.ts, 10, 15))
>T : Symbol(T, Decl(nonNullableReduction.ts, 10, 12))
>T : Symbol(T, Decl(nonNullableReduction.ts, 10, 12))
let z = x!; // NonNullable<T>
>z : Symbol(z, Decl(nonNullableReduction.ts, 11, 7))
>x : Symbol(x, Decl(nonNullableReduction.ts, 10, 15))
}
function f2<T, U extends null | undefined>(x: T | U) {
>f2 : Symbol(f2, Decl(nonNullableReduction.ts, 12, 1))
>T : Symbol(T, Decl(nonNullableReduction.ts, 14, 12))
>U : Symbol(U, Decl(nonNullableReduction.ts, 14, 14))
>x : Symbol(x, Decl(nonNullableReduction.ts, 14, 43))
>T : Symbol(T, Decl(nonNullableReduction.ts, 14, 12))
>U : Symbol(U, Decl(nonNullableReduction.ts, 14, 14))
let z = x!; // NonNullable<T>
>z : Symbol(z, Decl(nonNullableReduction.ts, 15, 7))
>x : Symbol(x, Decl(nonNullableReduction.ts, 14, 43))
}