diff --git a/tests/baselines/reference/inferTypes2.js b/tests/baselines/reference/inferTypes2.js index ad1074d9f6a..2b2c318716a 100644 --- a/tests/baselines/reference/inferTypes2.js +++ b/tests/baselines/reference/inferTypes2.js @@ -1,22 +1,42 @@ //// [inferTypes2.ts] -// Repro from #22755 +// Repros from #22755 export declare function foo(obj: T): T extends () => infer P ? P : never; export function bar(obj: T) { return foo(obj); } + +export type BadNested = { x: T extends number ? T : string }; + +export declare function foo2(obj: T): T extends { [K in keyof BadNested]: BadNested[K] } ? P : never; +export function bar2(obj: T) { + return foo2(obj); +} //// [inferTypes2.js] "use strict"; -// Repro from #22755 +// Repros from #22755 exports.__esModule = true; function bar(obj) { return foo(obj); } exports.bar = bar; +function bar2(obj) { + return foo2(obj); +} +exports.bar2 = bar2; //// [inferTypes2.d.ts] export declare function foo(obj: T): T extends () => infer P ? P : never; export declare function bar(obj: T): T extends () => infer P ? P : never; +export declare type BadNested = { + x: T extends number ? T : string; +}; +export declare function foo2(obj: T): T extends { + [K in keyof BadNested]: BadNested[K]; +} ? P : never; +export declare function bar2(obj: T): T extends { + x: infer P extends number ? infer P : string; +} ? P : never; diff --git a/tests/baselines/reference/inferTypes2.symbols b/tests/baselines/reference/inferTypes2.symbols index 868736695bc..d32d9a7012b 100644 --- a/tests/baselines/reference/inferTypes2.symbols +++ b/tests/baselines/reference/inferTypes2.symbols @@ -1,5 +1,5 @@ === tests/cases/conformance/types/conditional/inferTypes2.ts === -// Repro from #22755 +// Repros from #22755 export declare function foo(obj: T): T extends () => infer P ? P : never; >foo : Symbol(foo, Decl(inferTypes2.ts, 0, 0)) @@ -21,3 +21,35 @@ export function bar(obj: T) { >obj : Symbol(obj, Decl(inferTypes2.ts, 3, 23)) } +export type BadNested = { x: T extends number ? T : string }; +>BadNested : Symbol(BadNested, Decl(inferTypes2.ts, 5, 1)) +>T : Symbol(T, Decl(inferTypes2.ts, 7, 22)) +>x : Symbol(x, Decl(inferTypes2.ts, 7, 28)) +>T : Symbol(T, Decl(inferTypes2.ts, 7, 22)) +>T : Symbol(T, Decl(inferTypes2.ts, 7, 22)) + +export declare function foo2(obj: T): T extends { [K in keyof BadNested]: BadNested[K] } ? P : never; +>foo2 : Symbol(foo2, Decl(inferTypes2.ts, 7, 64)) +>T : Symbol(T, Decl(inferTypes2.ts, 9, 29)) +>obj : Symbol(obj, Decl(inferTypes2.ts, 9, 32)) +>T : Symbol(T, Decl(inferTypes2.ts, 9, 29)) +>T : Symbol(T, Decl(inferTypes2.ts, 9, 29)) +>K : Symbol(K, Decl(inferTypes2.ts, 9, 54)) +>BadNested : Symbol(BadNested, Decl(inferTypes2.ts, 5, 1)) +>P : Symbol(P, Decl(inferTypes2.ts, 9, 80), Decl(inferTypes2.ts, 9, 101)) +>BadNested : Symbol(BadNested, Decl(inferTypes2.ts, 5, 1)) +>P : Symbol(P, Decl(inferTypes2.ts, 9, 80), Decl(inferTypes2.ts, 9, 101)) +>K : Symbol(K, Decl(inferTypes2.ts, 9, 54)) +>P : Symbol(P, Decl(inferTypes2.ts, 9, 80), Decl(inferTypes2.ts, 9, 101)) + +export function bar2(obj: T) { +>bar2 : Symbol(bar2, Decl(inferTypes2.ts, 9, 122)) +>T : Symbol(T, Decl(inferTypes2.ts, 10, 21)) +>obj : Symbol(obj, Decl(inferTypes2.ts, 10, 24)) +>T : Symbol(T, Decl(inferTypes2.ts, 10, 21)) + + return foo2(obj); +>foo2 : Symbol(foo2, Decl(inferTypes2.ts, 7, 64)) +>obj : Symbol(obj, Decl(inferTypes2.ts, 10, 24)) +} + diff --git a/tests/baselines/reference/inferTypes2.types b/tests/baselines/reference/inferTypes2.types index 1fd3d7384af..c6ffa871ee9 100644 --- a/tests/baselines/reference/inferTypes2.types +++ b/tests/baselines/reference/inferTypes2.types @@ -1,5 +1,5 @@ === tests/cases/conformance/types/conditional/inferTypes2.ts === -// Repro from #22755 +// Repros from #22755 export declare function foo(obj: T): T extends () => infer P ? P : never; >foo : (obj: T) => T extends () => infer P ? P : never @@ -22,3 +22,36 @@ export function bar(obj: T) { >obj : T } +export type BadNested = { x: T extends number ? T : string }; +>BadNested : BadNested +>T : T +>x : T extends number ? T : string +>T : T +>T : T + +export declare function foo2(obj: T): T extends { [K in keyof BadNested]: BadNested[K] } ? P : never; +>foo2 : (obj: T) => T extends { x: infer P extends number ? infer P : string; } ? P : never +>T : T +>obj : T +>T : T +>T : T +>K : K +>BadNested : BadNested +>P : P +>BadNested : BadNested +>P : P +>K : K +>P : P + +export function bar2(obj: T) { +>bar2 : (obj: T) => T extends { x: infer P extends number ? infer P : string; } ? P : never +>T : T +>obj : T +>T : T + + return foo2(obj); +>foo2(obj) : T extends { x: infer P extends number ? infer P : string; } ? P : never +>foo2 : (obj: T) => T extends { x: infer P extends number ? infer P : string; } ? P : never +>obj : T +} +