24 lines
637 B
TypeScript
24 lines
637 B
TypeScript
// @strict: true
|
|
// @declaration: true
|
|
|
|
// Repros from #22755
|
|
|
|
export declare function foo<T>(obj: T): T extends () => infer P ? P : never;
|
|
export function bar<T>(obj: T) {
|
|
return foo(obj);
|
|
}
|
|
|
|
export type BadNested<T> = { x: T extends number ? T : string };
|
|
|
|
export declare function foo2<T>(obj: T): T extends { [K in keyof BadNested<infer P>]: BadNested<infer P>[K] } ? P : never;
|
|
export function bar2<T>(obj: T) {
|
|
return foo2(obj);
|
|
}
|
|
|
|
// Repros from #31099
|
|
|
|
type Weird = any extends infer U ? U : never;
|
|
type AlsoWeird = unknown extends infer U ? U : never;
|
|
|
|
const a: Weird = null;
|
|
const b: string = a;
|