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 63 64 65
|
=== tests/cases/compiler/identicalGenericConditionalsWithInferRelated.ts ===
function f<X>(arg: X) {
>f : <X>(arg: X) => void
>arg : X
type Cond1 = X extends [infer A] ? A : never;
>Cond1 : X extends [infer A] ? A : never
type Cond2 = X extends [infer A] ? A : never;
>Cond2 : X extends [infer A] ? A : never
let x: Cond1 = null as any;
>x : X extends [infer A] ? A : never
>null as any : any
>null : null
let y: Cond2 = null as any;
>y : X extends [infer A] ? A : never
>null as any : any
>null : null
x = y; // is err, should be ok
>x = y : X extends [infer A] ? A : never
>x : X extends [infer A] ? A : never
>y : X extends [infer A] ? A : never
y = x; // is err, should be ok
>y = x : X extends [infer A] ? A : never
>y : X extends [infer A] ? A : never
>x : X extends [infer A] ? A : never
}
// repro from https://github.com/microsoft/TypeScript/issues/26627
export type Constructor<T> = new (...args: any[]) => T
>Constructor : Constructor<T>
>args : any[]
export type MappedResult<T> =
>MappedResult : MappedResult<T>
T extends Boolean ? boolean :
T extends Number ? number :
T extends String ? string :
T
interface X {
decode<C extends Constructor<any>>(ctor: C): MappedResult<C extends Constructor<infer T> ? T : never>
>decode : <C extends Constructor<any>>(ctor: C) => MappedResult<C extends Constructor<infer T> ? T : never>
>ctor : C
}
class Y implements X {
>Y : Y
decode<C extends Constructor<any>>(ctor: C): MappedResult<C extends Constructor<infer T> ? T : never> {
>decode : <C extends Constructor<any>>(ctor: C) => MappedResult<C extends Constructor<infer T> ? T : never>
>ctor : C
throw new Error()
>new Error() : Error
>Error : ErrorConstructor
}
}
|