-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Expand file tree
/
Copy pathbestChoiceType.types
More file actions
151 lines (139 loc) · 8.04 KB
/
Copy pathbestChoiceType.types
File metadata and controls
151 lines (139 loc) · 8.04 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
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
140
141
142
143
144
145
146
147
148
149
150
151
//// [tests/cases/compiler/bestChoiceType.ts] ////
=== bestChoiceType.ts ===
// Repro from #10041
(''.match(/ /) || []).map(s => s.toLowerCase());
>(''.match(/ /) || []).map(s => s.toLowerCase()) : string[]
> : ^^^^^^^^
>(''.match(/ /) || []).map : (<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[])
> : ^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^
>(''.match(/ /) || []) : RegExpMatchArray | []
> : ^^^^^^^^^^^^^^^^^^^^^
>''.match(/ /) || [] : RegExpMatchArray | []
> : ^^^^^^^^^^^^^^^^^^^^^
>''.match(/ /) : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>''.match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>'' : ""
> : ^^
>match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>/ / : RegExp
> : ^^^^^^
>[] : []
> : ^^
>map : (<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[])
> : ^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^
>s => s.toLowerCase() : (s: string) => string
> : ^ ^^^^^^^^^^^^^^^^^^^
>s : string
> : ^^^^^^
>s.toLowerCase() : string
> : ^^^^^^
>s.toLowerCase : <T extends string>(this: T) => string extends T ? string : Lowercase<T>
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
>s : string
> : ^^^^^^
>toLowerCase : <T extends string>(this: T) => string extends T ? string : Lowercase<T>
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
// Similar cases
function f1() {
>f1 : () => void
> : ^^^^^^^^^^
let x = ''.match(/ /);
>x : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>''.match(/ /) : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>''.match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>'' : ""
> : ^^
>match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>/ / : RegExp
> : ^^^^^^
let y = x || [];
>y : RegExpMatchArray | []
> : ^^^^^^^^^^^^^^^^^^^^^
>x || [] : RegExpMatchArray | []
> : ^^^^^^^^^^^^^^^^^^^^^
>x : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>[] : []
> : ^^
let z = y.map(s => s.toLowerCase());
>z : string[]
> : ^^^^^^^^
>y.map(s => s.toLowerCase()) : string[]
> : ^^^^^^^^
>y.map : (<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[])
> : ^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^
>y : RegExpMatchArray | []
> : ^^^^^^^^^^^^^^^^^^^^^
>map : (<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[])
> : ^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^
>s => s.toLowerCase() : (s: string) => string
> : ^ ^^^^^^^^^^^^^^^^^^^
>s : string
> : ^^^^^^
>s.toLowerCase() : string
> : ^^^^^^
>s.toLowerCase : <T extends string>(this: T) => string extends T ? string : Lowercase<T>
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
>s : string
> : ^^^^^^
>toLowerCase : <T extends string>(this: T) => string extends T ? string : Lowercase<T>
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
}
function f2() {
>f2 : () => void
> : ^^^^^^^^^^
let x = ''.match(/ /);
>x : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>''.match(/ /) : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>''.match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>'' : ""
> : ^^
>match : { (regexp: string | RegExp): RegExpMatchArray | null; (matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; }
> : ^^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^
>/ / : RegExp
> : ^^^^^^
let y = x ? x : [];
>y : RegExpMatchArray | never[]
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^
>x ? x : [] : RegExpMatchArray | never[]
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^
>x : RegExpMatchArray | null
> : ^^^^^^^^^^^^^^^^^^^^^^^
>x : RegExpMatchArray
> : ^^^^^^^^^^^^^^^^
>[] : never[]
> : ^^^^^^^
let z = y.map(s => s.toLowerCase());
>z : string[]
> : ^^^^^^^^
>y.map(s => s.toLowerCase()) : string[]
> : ^^^^^^^^
>y.map : (<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[])
> : ^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^
>y : RegExpMatchArray | never[]
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^
>map : (<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[])
> : ^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^
>s => s.toLowerCase() : (s: string) => string
> : ^ ^^^^^^^^^^^^^^^^^^^
>s : string
> : ^^^^^^
>s.toLowerCase() : string
> : ^^^^^^
>s.toLowerCase : <T extends string>(this: T) => string extends T ? string : Lowercase<T>
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
>s : string
> : ^^^^^^
>toLowerCase : <T extends string>(this: T) => string extends T ? string : Lowercase<T>
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
}