@@ -253,3 +253,112 @@ function example(x: Union) {
253
253
>x : Symbol(x, Decl(narrowingMutualSubtypes.ts, 92, 17))
254
254
}
255
255
256
+ function checksArrayOrObject1(obj: Record<string, any> | Record<string, any>[]) {
257
+ >checksArrayOrObject1 : Symbol(checksArrayOrObject1, Decl(narrowingMutualSubtypes.ts, 102, 1))
258
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
259
+ >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
260
+ >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
261
+
262
+ // "accidentally" guards the first branch on the length
263
+ if (Array.isArray(obj) && obj.length) {
264
+ >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
265
+ >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
266
+ >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
267
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
268
+ >obj.length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
269
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
270
+ >length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
271
+
272
+ for (let key in obj) {
273
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 107, 16))
274
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
275
+
276
+ if (obj[key] !== undefined) {
277
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
278
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 107, 16))
279
+ >undefined : Symbol(undefined)
280
+
281
+ console.log(obj[key])
282
+ >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
283
+ >console : Symbol(console, Decl(lib.dom.d.ts, --, --))
284
+ >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
285
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
286
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 107, 16))
287
+ }
288
+ }
289
+ }
290
+ else {
291
+ // 'obj' should probably not include an array type here.
292
+ for (let key in obj) {
293
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 115, 16))
294
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
295
+
296
+ if (obj[key] !== undefined) {
297
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
298
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 115, 16))
299
+ >undefined : Symbol(undefined)
300
+
301
+ console.log(obj[key])
302
+ >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
303
+ >console : Symbol(console, Decl(lib.dom.d.ts, --, --))
304
+ >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
305
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 104, 30))
306
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 115, 16))
307
+ }
308
+ }
309
+ }
310
+ }
311
+
312
+ function checksArrayOrObject2(obj: Record<string, any> | Record<string, any>[]) {
313
+ >checksArrayOrObject2 : Symbol(checksArrayOrObject2, Decl(narrowingMutualSubtypes.ts, 121, 1))
314
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
315
+ >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
316
+ >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
317
+
318
+ if (Array.isArray(obj)) {
319
+ >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
320
+ >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
321
+ >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
322
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
323
+
324
+ // obj should only be an array type here
325
+ for (let key in obj) {
326
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 126, 16))
327
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
328
+
329
+ if (obj[key] !== undefined) {
330
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
331
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 126, 16))
332
+ >undefined : Symbol(undefined)
333
+
334
+ console.log(obj[key])
335
+ >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
336
+ >console : Symbol(console, Decl(lib.dom.d.ts, --, --))
337
+ >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
338
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
339
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 126, 16))
340
+ }
341
+ }
342
+ }
343
+ else {
344
+ // 'obj' should probably not include an array type here.
345
+ for (let key in obj) {
346
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 134, 16))
347
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
348
+
349
+ if (obj[key] !== undefined) {
350
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
351
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 134, 16))
352
+ >undefined : Symbol(undefined)
353
+
354
+ console.log(obj[key])
355
+ >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
356
+ >console : Symbol(console, Decl(lib.dom.d.ts, --, --))
357
+ >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
358
+ >obj : Symbol(obj, Decl(narrowingMutualSubtypes.ts, 123, 30))
359
+ >key : Symbol(key, Decl(narrowingMutualSubtypes.ts, 134, 16))
360
+ }
361
+ }
362
+ }
363
+ }
364
+
0 commit comments