diff --git a/tests/baselines/reference/inferTypes1.errors.txt b/tests/baselines/reference/inferTypes1.errors.txt index b36528f721d..5531ec08c7f 100644 --- a/tests/baselines/reference/inferTypes1.errors.txt +++ b/tests/baselines/reference/inferTypes1.errors.txt @@ -191,4 +191,19 @@ tests/cases/conformance/types/conditional/inferTypes1.ts(134,40): error TS2322: type B = string extends T ? { [P in T]: void; } : T; // Error ~ !!! error TS2322: Type 'T' is not assignable to type 'string'. + + // Repro from #22302 + + type MatchingKeys = + K extends keyof T ? T[K] extends U ? K : never : never; + + type VoidKeys = MatchingKeys; + + interface test { + a: 1, + b: void + } + + type T80 = MatchingKeys; + type T81 = VoidKeys; \ No newline at end of file diff --git a/tests/baselines/reference/inferTypes1.js b/tests/baselines/reference/inferTypes1.js index bc53f238997..6e41cfe1998 100644 --- a/tests/baselines/reference/inferTypes1.js +++ b/tests/baselines/reference/inferTypes1.js @@ -133,6 +133,21 @@ type C2 = S extends A2 ? [T, U] : never; type A = T extends string ? { [P in T]: void; } : T; type B = string extends T ? { [P in T]: void; } : T; // Error + +// Repro from #22302 + +type MatchingKeys = + K extends keyof T ? T[K] extends U ? K : never : never; + +type VoidKeys = MatchingKeys; + +interface test { + a: 1, + b: void +} + +type T80 = MatchingKeys; +type T81 = VoidKeys; //// [inferTypes1.js] diff --git a/tests/baselines/reference/inferTypes1.symbols b/tests/baselines/reference/inferTypes1.symbols index 784482e72c9..9e09eaea21d 100644 --- a/tests/baselines/reference/inferTypes1.symbols +++ b/tests/baselines/reference/inferTypes1.symbols @@ -575,3 +575,47 @@ type B = string extends T ? { [P in T]: void; } : T; // Error >T : Symbol(T, Decl(inferTypes1.ts, 133, 7)) >T : Symbol(T, Decl(inferTypes1.ts, 133, 7)) +// Repro from #22302 + +type MatchingKeys = +>MatchingKeys : Symbol(MatchingKeys, Decl(inferTypes1.ts, 133, 55)) +>T : Symbol(T, Decl(inferTypes1.ts, 137, 18)) +>U : Symbol(U, Decl(inferTypes1.ts, 137, 20)) +>K : Symbol(K, Decl(inferTypes1.ts, 137, 23)) +>T : Symbol(T, Decl(inferTypes1.ts, 137, 18)) +>T : Symbol(T, Decl(inferTypes1.ts, 137, 18)) + + K extends keyof T ? T[K] extends U ? K : never : never; +>K : Symbol(K, Decl(inferTypes1.ts, 137, 23)) +>T : Symbol(T, Decl(inferTypes1.ts, 137, 18)) +>T : Symbol(T, Decl(inferTypes1.ts, 137, 18)) +>K : Symbol(K, Decl(inferTypes1.ts, 137, 23)) +>U : Symbol(U, Decl(inferTypes1.ts, 137, 20)) +>K : Symbol(K, Decl(inferTypes1.ts, 137, 23)) + +type VoidKeys = MatchingKeys; +>VoidKeys : Symbol(VoidKeys, Decl(inferTypes1.ts, 138, 59)) +>T : Symbol(T, Decl(inferTypes1.ts, 140, 14)) +>MatchingKeys : Symbol(MatchingKeys, Decl(inferTypes1.ts, 133, 55)) +>T : Symbol(T, Decl(inferTypes1.ts, 140, 14)) + +interface test { +>test : Symbol(test, Decl(inferTypes1.ts, 140, 41)) + + a: 1, +>a : Symbol(test.a, Decl(inferTypes1.ts, 142, 16)) + + b: void +>b : Symbol(test.b, Decl(inferTypes1.ts, 143, 9)) +} + +type T80 = MatchingKeys; +>T80 : Symbol(T80, Decl(inferTypes1.ts, 145, 1)) +>MatchingKeys : Symbol(MatchingKeys, Decl(inferTypes1.ts, 133, 55)) +>test : Symbol(test, Decl(inferTypes1.ts, 140, 41)) + +type T81 = VoidKeys; +>T81 : Symbol(T81, Decl(inferTypes1.ts, 147, 36)) +>VoidKeys : Symbol(VoidKeys, Decl(inferTypes1.ts, 138, 59)) +>test : Symbol(test, Decl(inferTypes1.ts, 140, 41)) + diff --git a/tests/baselines/reference/inferTypes1.types b/tests/baselines/reference/inferTypes1.types index f7cdc69943f..523dd669e4c 100644 --- a/tests/baselines/reference/inferTypes1.types +++ b/tests/baselines/reference/inferTypes1.types @@ -582,3 +582,47 @@ type B = string extends T ? { [P in T]: void; } : T; // Error >T : T >T : T +// Repro from #22302 + +type MatchingKeys = +>MatchingKeys : MatchingKeys +>T : T +>U : U +>K : K +>T : T +>T : T + + K extends keyof T ? T[K] extends U ? K : never : never; +>K : K +>T : T +>T : T +>K : K +>U : U +>K : K + +type VoidKeys = MatchingKeys; +>VoidKeys : MatchingKeys +>T : T +>MatchingKeys : MatchingKeys +>T : T + +interface test { +>test : test + + a: 1, +>a : 1 + + b: void +>b : void +} + +type T80 = MatchingKeys; +>T80 : "b" +>MatchingKeys : MatchingKeys +>test : test + +type T81 = VoidKeys; +>T81 : "b" +>VoidKeys : MatchingKeys +>test : test +