Skip to content

Commit 19e07ea

Browse files
committed
Add tests
1 parent 6fcc99e commit 19e07ea

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

tests/cases/conformance/types/conditional/inferTypes1.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,15 @@ type T76<T extends T[], U extends T> = { x: T };
9090
type T77<T> = T extends T76<infer X, infer Y> ? T76<X, Y> : never;
9191
type T78<T> = T extends T76<infer X, infer X> ? T76<X, X> : never;
9292

93+
type Foo<T extends string, U extends T> = [T, U];
94+
type Bar<T> = T extends Foo<infer X, infer Y> ? Foo<X, Y> : never;
95+
96+
type T90 = Bar<[string, string]>; // [string, string]
97+
type T91 = Bar<[string, "a"]>; // [string, "a"]
98+
type T92 = Bar<[string, "a"] & { x: string }>; // [string, "a"]
99+
type T93 = Bar<["a", string]>; // never
100+
type T94 = Bar<[number, number]>; // never
101+
93102
// Example from #21496
94103

95104
type JsonifiedObject<T extends object> = { [K in keyof T]: Jsonified<T[K]> };
@@ -150,3 +159,11 @@ interface test {
150159

151160
type T80 = MatchingKeys<test, void>;
152161
type T81 = VoidKeys<test>;
162+
163+
// Repro from #22221
164+
165+
type MustBeString<T extends string> = T;
166+
type EnsureIsString<T> = T extends MustBeString<infer U> ? U : never;
167+
168+
type Test1 = EnsureIsString<"hello">; // "hello"
169+
type Test2 = EnsureIsString<42>; // never

0 commit comments

Comments
 (0)