|  | 
|  | 1 | +=== tests/cases/compiler/unionWithIndexSignature.ts === | 
|  | 2 | +interface NumList { | 
|  | 3 | +>NumList : Symbol(NumList, Decl(unionWithIndexSignature.ts, 0, 0)) | 
|  | 4 | + | 
|  | 5 | +  kind: 'n'; | 
|  | 6 | +>kind : Symbol(NumList.kind, Decl(unionWithIndexSignature.ts, 0, 19)) | 
|  | 7 | + | 
|  | 8 | +  [x: number]: number; | 
|  | 9 | +>x : Symbol(x, Decl(unionWithIndexSignature.ts, 2, 3)) | 
|  | 10 | +} | 
|  | 11 | +interface StrList { | 
|  | 12 | +>StrList : Symbol(StrList, Decl(unionWithIndexSignature.ts, 3, 1)) | 
|  | 13 | + | 
|  | 14 | +  kind: 's'; | 
|  | 15 | +>kind : Symbol(StrList.kind, Decl(unionWithIndexSignature.ts, 4, 19)) | 
|  | 16 | + | 
|  | 17 | +  [x: number]: string; | 
|  | 18 | +>x : Symbol(x, Decl(unionWithIndexSignature.ts, 6, 3)) | 
|  | 19 | +} | 
|  | 20 | + | 
|  | 21 | +export function foo<T extends NumList | StrList>(arr: T & (NumList | StrList)) { | 
|  | 22 | +>foo : Symbol(foo, Decl(unionWithIndexSignature.ts, 7, 1)) | 
|  | 23 | +>T : Symbol(T, Decl(unionWithIndexSignature.ts, 9, 20)) | 
|  | 24 | +>NumList : Symbol(NumList, Decl(unionWithIndexSignature.ts, 0, 0)) | 
|  | 25 | +>StrList : Symbol(StrList, Decl(unionWithIndexSignature.ts, 3, 1)) | 
|  | 26 | +>arr : Symbol(arr, Decl(unionWithIndexSignature.ts, 9, 49)) | 
|  | 27 | +>T : Symbol(T, Decl(unionWithIndexSignature.ts, 9, 20)) | 
|  | 28 | +>NumList : Symbol(NumList, Decl(unionWithIndexSignature.ts, 0, 0)) | 
|  | 29 | +>StrList : Symbol(StrList, Decl(unionWithIndexSignature.ts, 3, 1)) | 
|  | 30 | + | 
|  | 31 | +  let zz = arr[1];  // Error | 
|  | 32 | +>zz : Symbol(zz, Decl(unionWithIndexSignature.ts, 10, 5)) | 
|  | 33 | +>arr : Symbol(arr, Decl(unionWithIndexSignature.ts, 9, 49)) | 
|  | 34 | +} | 
|  | 35 | + | 
|  | 36 | +// Repro from #38102 | 
|  | 37 | + | 
|  | 38 | +export type TypedArray = Int32Array | Uint8Array; | 
|  | 39 | +>TypedArray : Symbol(TypedArray, Decl(unionWithIndexSignature.ts, 11, 1)) | 
|  | 40 | +>Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) | 
|  | 41 | +>Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) | 
|  | 42 | + | 
|  | 43 | +export function isTypedArray(a: {}): a is Int32Array | Uint8Array { | 
|  | 44 | +>isTypedArray : Symbol(isTypedArray, Decl(unionWithIndexSignature.ts, 15, 49)) | 
|  | 45 | +>a : Symbol(a, Decl(unionWithIndexSignature.ts, 17, 29)) | 
|  | 46 | +>a : Symbol(a, Decl(unionWithIndexSignature.ts, 17, 29)) | 
|  | 47 | +>Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) | 
|  | 48 | +>Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) | 
|  | 49 | + | 
|  | 50 | +  return a instanceof Int32Array || a instanceof Uint8Array; | 
|  | 51 | +>a : Symbol(a, Decl(unionWithIndexSignature.ts, 17, 29)) | 
|  | 52 | +>Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) | 
|  | 53 | +>a : Symbol(a, Decl(unionWithIndexSignature.ts, 17, 29)) | 
|  | 54 | +>Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) | 
|  | 55 | +} | 
|  | 56 | + | 
|  | 57 | +export function flatten<T extends number|TypedArray>(arr: T) { | 
|  | 58 | +>flatten : Symbol(flatten, Decl(unionWithIndexSignature.ts, 19, 1)) | 
|  | 59 | +>T : Symbol(T, Decl(unionWithIndexSignature.ts, 21, 24)) | 
|  | 60 | +>TypedArray : Symbol(TypedArray, Decl(unionWithIndexSignature.ts, 11, 1)) | 
|  | 61 | +>arr : Symbol(arr, Decl(unionWithIndexSignature.ts, 21, 53)) | 
|  | 62 | +>T : Symbol(T, Decl(unionWithIndexSignature.ts, 21, 24)) | 
|  | 63 | + | 
|  | 64 | +  if (isTypedArray(arr)) { | 
|  | 65 | +>isTypedArray : Symbol(isTypedArray, Decl(unionWithIndexSignature.ts, 15, 49)) | 
|  | 66 | +>arr : Symbol(arr, Decl(unionWithIndexSignature.ts, 21, 53)) | 
|  | 67 | + | 
|  | 68 | +      arr[1]; | 
|  | 69 | +>arr : Symbol(arr, Decl(unionWithIndexSignature.ts, 21, 53)) | 
|  | 70 | +  } | 
|  | 71 | +} | 
|  | 72 | + | 
0 commit comments