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
|
=== tests/cases/compiler/unionWithIndexSignature.ts ===
interface NumList {
kind: 'n';
>kind : "n"
[x: number]: number;
>x : number
}
interface StrList {
kind: 's';
>kind : "s"
[x: number]: string;
>x : number
}
export function foo<T extends NumList | StrList>(arr: T & (NumList | StrList)) {
>foo : <T extends NumList | StrList>(arr: T & (NumList | StrList)) => void
>arr : T & (NumList | StrList)
let zz = arr[1]; // Error
>zz : string | number
>arr[1] : string | number
>arr : NumList | StrList
>1 : 1
}
// Repro from #38102
export type TypedArray = Int32Array | Uint8Array;
>TypedArray : Int32Array | Uint8Array
export function isTypedArray(a: {}): a is Int32Array | Uint8Array {
>isTypedArray : (a: {}) => a is Int32Array | Uint8Array
>a : {}
return a instanceof Int32Array || a instanceof Uint8Array;
>a instanceof Int32Array || a instanceof Uint8Array : boolean
>a instanceof Int32Array : boolean
>a : {}
>Int32Array : Int32ArrayConstructor
>a instanceof Uint8Array : boolean
>a : {}
>Uint8Array : Uint8ArrayConstructor
}
export function flatten<T extends number|TypedArray>(arr: T) {
>flatten : <T extends number | TypedArray>(arr: T) => void
>arr : T
if (isTypedArray(arr)) {
>isTypedArray(arr) : boolean
>isTypedArray : (a: {}) => a is Int32Array | Uint8Array
>arr : number | TypedArray
arr[1];
>arr[1] : number
>arr : Int32Array | Uint8Array
>1 : 1
}
}
|