@@ -13,7 +13,7 @@ if (u === 5) {
13
13
const y = u . toString ( 10 ) ;
14
14
}
15
15
16
- if ( u === true || u === false ) {
16
+ if ( u === true || u === false ) {
17
17
const someBool : boolean = u ;
18
18
}
19
19
@@ -25,28 +25,93 @@ if (u === null) {
25
25
const someNull : null = u ;
26
26
}
27
27
28
- if ( u === symb ) {
28
+ if ( u === symb ) {
29
29
const symbolAlias : typeof symb = u ;
30
30
}
31
31
32
32
if ( ! ( u === 42 ) ) {
33
- u // u should still be `unknown` here
33
+ type A = isTrue < isUnknown < typeof u >>
34
34
}
35
35
36
36
if ( u !== 42 ) {
37
- type A = isTrue < isUnknown < typeof u >>
37
+ type B = isTrue < isUnknown < typeof u >>
38
38
}
39
39
40
40
if ( u == 42 ) {
41
- type B = isTrue < isUnknown < typeof u >>
41
+ type C = isTrue < isUnknown < typeof u >>
42
42
}
43
43
44
44
if ( u == true ) {
45
- type C = isTrue < isUnknown < typeof u >>
45
+ type D = isTrue < isUnknown < typeof u >>
46
46
}
47
47
48
48
if ( u == Object ) {
49
- type D = isTrue < isUnknown < typeof u >>
49
+ type E = isTrue < isUnknown < typeof u >>
50
+ }
51
+
52
+ declare const aString : string ;
53
+ declare const aBoolean: boolean ;
54
+ declare const aNumber: number ;
55
+ declare const anObject: object ;
56
+ declare const anObjectLiteral: { x : number } ;
57
+ declare const aUnion: { x : number } | { y : string } ;
58
+ declare const anIntersection: { x : number } & { y : string } ;
59
+ declare const aFunction: ( ) => number ;
60
+
61
+ if ( u === aString ) {
62
+ let uString : string = u ;
63
+ }
64
+
65
+ if ( u === aBoolean ) {
66
+ let uString : boolean = u ;
67
+ }
68
+
69
+ if ( u === aNumber ) {
70
+ let uNumber : number = u ;
71
+ }
72
+
73
+ if ( u === anObject ) {
74
+ let uObject : object = u ;
75
+ }
76
+
77
+ if ( u === anObjectLiteral ) {
78
+ let uObjectLiteral : object = u ;
79
+ }
80
+
81
+ if ( u === aUnion ) {
82
+ type unionDoesNotNarrow = isTrue < isUnknown < typeof u >>
83
+ }
84
+
85
+ if ( u === anIntersection ) {
86
+ type intersectionDoesNotNarrow = isTrue < isUnknown < typeof u >>
87
+ }
88
+
89
+ if ( u === aFunction ) {
90
+ let uFunction : object = u ;
91
+ }
92
+
93
+ enum NumberEnum {
94
+ A ,
95
+ B ,
96
+ C
97
+ }
98
+
99
+ enum StringEnum {
100
+ A = "A" ,
101
+ B = "B" ,
102
+ C = "C"
103
+ }
104
+
105
+ if ( u === NumberEnum || u === StringEnum ) {
106
+ let enumObj : object = u ;
107
+ }
108
+
109
+ if ( u === NumberEnum . A ) {
110
+ let a : NumberEnum . A = u
111
+ }
112
+
113
+ if ( u === StringEnum . B ) {
114
+ let b : StringEnum . B = u
50
115
}
51
116
52
117
@@ -70,7 +135,6 @@ if (u === symb) {
70
135
var symbolAlias = u ;
71
136
}
72
137
if ( ! ( u === 42 ) ) {
73
- u ; // u should still be `unknown` here
74
138
}
75
139
if ( u !== 42 ) {
76
140
}
@@ -80,3 +144,46 @@ if (u == true) {
80
144
}
81
145
if ( u == Object ) {
82
146
}
147
+ if ( u === aString ) {
148
+ var uString = u ;
149
+ }
150
+ if ( u === aBoolean ) {
151
+ var uString = u ;
152
+ }
153
+ if ( u === aNumber ) {
154
+ var uNumber = u ;
155
+ }
156
+ if ( u === anObject ) {
157
+ var uObject = u ;
158
+ }
159
+ if ( u === anObjectLiteral ) {
160
+ var uObjectLiteral = u ;
161
+ }
162
+ if ( u === aUnion ) {
163
+ }
164
+ if ( u === anIntersection ) {
165
+ }
166
+ if ( u === aFunction ) {
167
+ var uFunction = u ;
168
+ }
169
+ var NumberEnum ;
170
+ ( function ( NumberEnum ) {
171
+ NumberEnum [ NumberEnum [ "A" ] = 0 ] = "A" ;
172
+ NumberEnum [ NumberEnum [ "B" ] = 1 ] = "B" ;
173
+ NumberEnum [ NumberEnum [ "C" ] = 2 ] = "C" ;
174
+ } ) ( NumberEnum || ( NumberEnum = { } ) ) ;
175
+ var StringEnum ;
176
+ ( function ( StringEnum ) {
177
+ StringEnum [ "A" ] = "A" ;
178
+ StringEnum [ "B" ] = "B" ;
179
+ StringEnum [ "C" ] = "C" ;
180
+ } ) ( StringEnum || ( StringEnum = { } ) ) ;
181
+ if ( u === NumberEnum || u === StringEnum ) {
182
+ var enumObj = u ;
183
+ }
184
+ if ( u === NumberEnum . A ) {
185
+ var a = u ;
186
+ }
187
+ if ( u === StringEnum . B ) {
188
+ var b = u ;
189
+ }
0 commit comments