@@ -73,31 +73,31 @@ const a4b = [r4, c4]; // {}[]
73
73
>r4 : Symbol(r4, Decl(narrowingMutualSubtypes.ts, 22, 13))
74
74
>c4 : Symbol(c4, Decl(narrowingMutualSubtypes.ts, 23, 5))
75
75
76
- // Check that narrowing preserves original type in false branch for non-identical mutual subtypes
76
+ // Check that {} is a strict supertype of Record<string, unknown>
77
77
78
78
declare function isObject1(value: unknown): value is Record<string, unknown>;
79
79
>isObject1 : Symbol(isObject1, Decl(narrowingMutualSubtypes.ts, 26, 21))
80
80
>value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 30, 27))
81
81
>value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 30, 27))
82
82
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
83
83
84
- function gg (x: {}) {
85
- >gg : Symbol(gg , Decl(narrowingMutualSubtypes.ts, 30, 77))
86
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 12 ))
84
+ function gg1 (x: {}) {
85
+ >gg1 : Symbol(gg1 , Decl(narrowingMutualSubtypes.ts, 30, 77))
86
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 13 ))
87
87
88
88
if (isObject1(x)) {
89
89
>isObject1 : Symbol(isObject1, Decl(narrowingMutualSubtypes.ts, 26, 21))
90
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 12 ))
90
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 13 ))
91
91
92
92
x; // Record<string, unknown>
93
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 12 ))
93
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 13 ))
94
94
}
95
95
else {
96
96
x; // {}
97
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 12 ))
97
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 13 ))
98
98
}
99
99
x; // {}
100
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 12 ))
100
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 32, 13 ))
101
101
}
102
102
103
103
declare function isObject2(value: unknown): value is {};
@@ -114,90 +114,142 @@ function gg2(x: Record<string, unknown>) {
114
114
>isObject2 : Symbol(isObject2, Decl(narrowingMutualSubtypes.ts, 40, 1))
115
115
>x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 44, 13))
116
116
117
- x; // {}
117
+ x; // Record<string, unknown>
118
118
>x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 44, 13))
119
119
}
120
120
else {
121
- x; // Record<string, unknown>
121
+ x; // never
122
122
>x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 44, 13))
123
123
}
124
124
x; // Record<string, unknown>
125
125
>x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 44, 13))
126
126
}
127
127
128
+ // Check that {} is a strict supertype of Record<string, any>
129
+
130
+ declare function isObject3(value: unknown): value is Record<string, any>;
131
+ >isObject3 : Symbol(isObject3, Decl(narrowingMutualSubtypes.ts, 52, 1))
132
+ >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 56, 27))
133
+ >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 56, 27))
134
+ >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
135
+
136
+ function gg3(x: {}) {
137
+ >gg3 : Symbol(gg3, Decl(narrowingMutualSubtypes.ts, 56, 73))
138
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 58, 13))
139
+
140
+ if (isObject3(x)) {
141
+ >isObject3 : Symbol(isObject3, Decl(narrowingMutualSubtypes.ts, 52, 1))
142
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 58, 13))
143
+
144
+ x; // Record<string, any>
145
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 58, 13))
146
+ }
147
+ else {
148
+ x; // {}
149
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 58, 13))
150
+ }
151
+ x; // {}
152
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 58, 13))
153
+ }
154
+
155
+ declare function isObject4(value: unknown): value is {};
156
+ >isObject4 : Symbol(isObject4, Decl(narrowingMutualSubtypes.ts, 66, 1))
157
+ >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 68, 27))
158
+ >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 68, 27))
159
+
160
+ function gg4(x: Record<string, any>) {
161
+ >gg4 : Symbol(gg4, Decl(narrowingMutualSubtypes.ts, 68, 56))
162
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 70, 13))
163
+ >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
164
+
165
+ if (isObject4(x)) {
166
+ >isObject4 : Symbol(isObject4, Decl(narrowingMutualSubtypes.ts, 66, 1))
167
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 70, 13))
168
+
169
+ x; // Record<string, any>
170
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 70, 13))
171
+ }
172
+ else {
173
+ x; // never
174
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 70, 13))
175
+ }
176
+ x; // Record<string, any>
177
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 70, 13))
178
+ }
179
+
128
180
// Repro from #50916
129
181
130
182
type Identity<T> = {[K in keyof T]: T[K]};
131
- >Identity : Symbol(Identity, Decl(narrowingMutualSubtypes.ts, 52 , 1))
132
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 56 , 14))
133
- >K : Symbol(K, Decl(narrowingMutualSubtypes.ts, 56 , 21))
134
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 56 , 14))
135
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 56 , 14))
136
- >K : Symbol(K, Decl(narrowingMutualSubtypes.ts, 56 , 21))
183
+ >Identity : Symbol(Identity, Decl(narrowingMutualSubtypes.ts, 78 , 1))
184
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 82 , 14))
185
+ >K : Symbol(K, Decl(narrowingMutualSubtypes.ts, 82 , 21))
186
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 82 , 14))
187
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 82 , 14))
188
+ >K : Symbol(K, Decl(narrowingMutualSubtypes.ts, 82 , 21))
137
189
138
190
type Self<T> = T extends unknown ? Identity<T> : never;
139
- >Self : Symbol(Self, Decl(narrowingMutualSubtypes.ts, 56 , 42))
140
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 58 , 10))
141
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 58 , 10))
142
- >Identity : Symbol(Identity, Decl(narrowingMutualSubtypes.ts, 52 , 1))
143
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 58 , 10))
191
+ >Self : Symbol(Self, Decl(narrowingMutualSubtypes.ts, 82 , 42))
192
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 84 , 10))
193
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 84 , 10))
194
+ >Identity : Symbol(Identity, Decl(narrowingMutualSubtypes.ts, 78 , 1))
195
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 84 , 10))
144
196
145
197
function is<T>(value: T): value is Self<T> {
146
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
147
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 60 , 12))
148
- >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 60 , 15))
149
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 60 , 12))
150
- >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 60 , 15))
151
- >Self : Symbol(Self, Decl(narrowingMutualSubtypes.ts, 56 , 42))
152
- >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 60 , 12))
198
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
199
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 86 , 12))
200
+ >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 86 , 15))
201
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 86 , 12))
202
+ >value : Symbol(value, Decl(narrowingMutualSubtypes.ts, 86 , 15))
203
+ >Self : Symbol(Self, Decl(narrowingMutualSubtypes.ts, 82 , 42))
204
+ >T : Symbol(T, Decl(narrowingMutualSubtypes.ts, 86 , 12))
153
205
154
206
return true;
155
207
}
156
208
157
209
type Union = {a: number} | {b: number} | {c: number};
158
- >Union : Symbol(Union, Decl(narrowingMutualSubtypes.ts, 62 , 1))
159
- >a : Symbol(a, Decl(narrowingMutualSubtypes.ts, 64 , 15))
160
- >b : Symbol(b, Decl(narrowingMutualSubtypes.ts, 64 , 29))
161
- >c : Symbol(c, Decl(narrowingMutualSubtypes.ts, 64 , 43))
210
+ >Union : Symbol(Union, Decl(narrowingMutualSubtypes.ts, 88 , 1))
211
+ >a : Symbol(a, Decl(narrowingMutualSubtypes.ts, 90 , 15))
212
+ >b : Symbol(b, Decl(narrowingMutualSubtypes.ts, 90 , 29))
213
+ >c : Symbol(c, Decl(narrowingMutualSubtypes.ts, 90 , 43))
162
214
163
215
function example(x: Union) {
164
- >example : Symbol(example, Decl(narrowingMutualSubtypes.ts, 64 , 54))
165
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
166
- >Union : Symbol(Union, Decl(narrowingMutualSubtypes.ts, 62 , 1))
216
+ >example : Symbol(example, Decl(narrowingMutualSubtypes.ts, 90 , 54))
217
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
218
+ >Union : Symbol(Union, Decl(narrowingMutualSubtypes.ts, 88 , 1))
167
219
168
220
if (is(x)) {}
169
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
170
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
221
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
222
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
171
223
172
224
if (is(x)) {}
173
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
174
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
225
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
226
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
175
227
176
228
if (is(x)) {}
177
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
178
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
229
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
230
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
179
231
180
232
if (is(x)) {}
181
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
182
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
233
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
234
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
183
235
184
236
if (is(x)) {}
185
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
186
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
237
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
238
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
187
239
188
240
if (is(x)) {}
189
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
190
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
241
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
242
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
191
243
192
244
if (is(x)) {}
193
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
194
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
245
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
246
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
195
247
196
248
if (is(x)) {}
197
- >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 58 , 55))
198
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
249
+ >is : Symbol(is, Decl(narrowingMutualSubtypes.ts, 84 , 55))
250
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
199
251
200
252
x; // Union
201
- >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 66 , 17))
253
+ >x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92 , 17))
202
254
}
203
255
0 commit comments