TypeScript/tests/cases/compiler/identicalGenericConditionalsWithInferRelated.ts
Wesley Wigham fd1e22bbf1
Instantiate generic conditional infer source types in the context of the target conditional (#31545)
* Instantiate generic conditional infer source types in the context of the target conditional

* Add test case from #26627
2019-08-19 13:01:08 -07:00

29 lines
836 B
TypeScript

function f<X>(arg: X) {
type Cond1 = X extends [infer A] ? A : never;
type Cond2 = X extends [infer A] ? A : never;
let x: Cond1 = null as any;
let y: Cond2 = null as any;
x = y; // is err, should be ok
y = x; // is err, should be ok
}
// repro from https://github.com/microsoft/TypeScript/issues/26627
export type Constructor<T> = new (...args: any[]) => T
export type 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>
}
class Y implements X {
decode<C extends Constructor<any>>(ctor: C): MappedResult<C extends Constructor<infer T> ? T : never> {
throw new Error()
}
}