forked from microsoft/TypeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathandAndGeneric.types
More file actions
75 lines (66 loc) · 1.51 KB
/
andAndGeneric.types
File metadata and controls
75 lines (66 loc) · 1.51 KB
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
//// [tests/cases/compiler/andAndGeneric.ts] ////
=== andAndGeneric.ts ===
declare function id<T>(x: T): T;
>id : <T>(x: T) => T
> : ^ ^^ ^^ ^^^^^
>x : T
> : ^
function f<T>(x: T) {
>f : <T>(x: T) => NonNullable<T>
> : ^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^
>x : T
> : ^
return id(x && x); // should NOT be narrowed to NonNullable<T>
>id(x && x) : NonNullable<T>
> : ^^^^^^^^^^^^^^
>id : <T_1>(x: T_1) => T_1
> : ^^^^^^ ^^ ^^^^^
>x && x : NonNullable<T>
> : ^^^^^^^^^^^^^^
>x : T
> : ^
>x : NonNullable<T>
> : ^^^^^^^^^^^^^^
}
// ---- expected types ----
const t1 = f(null); // null (currently incorrectly NonNullable<null> -> never)
>t1 : never
> : ^^^^^
>f(null) : never
> : ^^^^^
>f : <T>(x: T) => NonNullable<T>
> : ^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^
const t2 = f(0); // 0
>t2 : 0
> : ^
>f(0) : 0
> : ^
>f : <T>(x: T) => NonNullable<T>
> : ^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^
>0 : 0
> : ^
const t3 = f(1); // 1
>t3 : 1
> : ^
>f(1) : 1
> : ^
>f : <T>(x: T) => NonNullable<T>
> : ^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^
>1 : 1
> : ^
const t4 = f<"a" | null>("a"); // "a"
>t4 : "a"
> : ^^^
>f<"a" | null>("a") : "a"
> : ^^^
>f : <T>(x: T) => NonNullable<T>
> : ^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^
>"a" : "a"
> : ^^^
const t5 = f<"a" | null>(null); // null
>t5 : "a"
> : ^^^
>f<"a" | null>(null) : "a"
> : ^^^
>f : <T>(x: T) => NonNullable<T>
> : ^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^