|
| 1 | +=== tests/cases/compiler/deferredLookupTypeResolution.ts === |
| 2 | +// Repro from #17456 |
| 3 | + |
| 4 | +type StringContains<S extends string, L extends string> = ( |
| 5 | +>StringContains : Symbol(StringContains, Decl(deferredLookupTypeResolution.ts, 0, 0)) |
| 6 | +>S : Symbol(S, Decl(deferredLookupTypeResolution.ts, 2, 20)) |
| 7 | +>L : Symbol(L, Decl(deferredLookupTypeResolution.ts, 2, 37)) |
| 8 | + |
| 9 | + { [K in S]: 'true' } & |
| 10 | +>K : Symbol(K, Decl(deferredLookupTypeResolution.ts, 3, 7)) |
| 11 | +>S : Symbol(S, Decl(deferredLookupTypeResolution.ts, 2, 20)) |
| 12 | + |
| 13 | + { [key: string]: 'false' } |
| 14 | +>key : Symbol(key, Decl(deferredLookupTypeResolution.ts, 4, 7)) |
| 15 | + |
| 16 | + )[L] |
| 17 | +>L : Symbol(L, Decl(deferredLookupTypeResolution.ts, 2, 37)) |
| 18 | + |
| 19 | +type ObjectHasKey<O, L extends string> = StringContains<keyof O, L> |
| 20 | +>ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution.ts, 5, 6)) |
| 21 | +>O : Symbol(O, Decl(deferredLookupTypeResolution.ts, 7, 18)) |
| 22 | +>L : Symbol(L, Decl(deferredLookupTypeResolution.ts, 7, 20)) |
| 23 | +>StringContains : Symbol(StringContains, Decl(deferredLookupTypeResolution.ts, 0, 0)) |
| 24 | +>O : Symbol(O, Decl(deferredLookupTypeResolution.ts, 7, 18)) |
| 25 | +>L : Symbol(L, Decl(deferredLookupTypeResolution.ts, 7, 20)) |
| 26 | + |
| 27 | +type First<T> = ObjectHasKey<T, '0'>; // Should be deferred |
| 28 | +>First : Symbol(First, Decl(deferredLookupTypeResolution.ts, 7, 67)) |
| 29 | +>T : Symbol(T, Decl(deferredLookupTypeResolution.ts, 9, 11)) |
| 30 | +>ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution.ts, 5, 6)) |
| 31 | +>T : Symbol(T, Decl(deferredLookupTypeResolution.ts, 9, 11)) |
| 32 | + |
| 33 | +type T1 = ObjectHasKey<{ a: string }, 'a'>; // 'true' |
| 34 | +>T1 : Symbol(T1, Decl(deferredLookupTypeResolution.ts, 9, 37)) |
| 35 | +>ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution.ts, 5, 6)) |
| 36 | +>a : Symbol(a, Decl(deferredLookupTypeResolution.ts, 11, 24)) |
| 37 | + |
| 38 | +type T2 = ObjectHasKey<{ a: string }, 'b'>; // 'false' |
| 39 | +>T2 : Symbol(T2, Decl(deferredLookupTypeResolution.ts, 11, 43)) |
| 40 | +>ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution.ts, 5, 6)) |
| 41 | +>a : Symbol(a, Decl(deferredLookupTypeResolution.ts, 12, 24)) |
| 42 | + |
| 43 | +// Verify that mapped type isn't eagerly resolved in type-to-string operation |
| 44 | + |
| 45 | +declare function f1<A extends string, B extends string>(a: A, b: B): { [P in A | B]: any }; |
| 46 | +>f1 : Symbol(f1, Decl(deferredLookupTypeResolution.ts, 12, 43)) |
| 47 | +>A : Symbol(A, Decl(deferredLookupTypeResolution.ts, 16, 20)) |
| 48 | +>B : Symbol(B, Decl(deferredLookupTypeResolution.ts, 16, 37)) |
| 49 | +>a : Symbol(a, Decl(deferredLookupTypeResolution.ts, 16, 56)) |
| 50 | +>A : Symbol(A, Decl(deferredLookupTypeResolution.ts, 16, 20)) |
| 51 | +>b : Symbol(b, Decl(deferredLookupTypeResolution.ts, 16, 61)) |
| 52 | +>B : Symbol(B, Decl(deferredLookupTypeResolution.ts, 16, 37)) |
| 53 | +>P : Symbol(P, Decl(deferredLookupTypeResolution.ts, 16, 72)) |
| 54 | +>A : Symbol(A, Decl(deferredLookupTypeResolution.ts, 16, 20)) |
| 55 | +>B : Symbol(B, Decl(deferredLookupTypeResolution.ts, 16, 37)) |
| 56 | + |
| 57 | +function f2<A extends string>(a: A) { |
| 58 | +>f2 : Symbol(f2, Decl(deferredLookupTypeResolution.ts, 16, 91)) |
| 59 | +>A : Symbol(A, Decl(deferredLookupTypeResolution.ts, 18, 12)) |
| 60 | +>a : Symbol(a, Decl(deferredLookupTypeResolution.ts, 18, 30)) |
| 61 | +>A : Symbol(A, Decl(deferredLookupTypeResolution.ts, 18, 12)) |
| 62 | + |
| 63 | + return f1(a, 'x'); |
| 64 | +>f1 : Symbol(f1, Decl(deferredLookupTypeResolution.ts, 12, 43)) |
| 65 | +>a : Symbol(a, Decl(deferredLookupTypeResolution.ts, 18, 30)) |
| 66 | +} |
| 67 | + |
| 68 | +function f3(x: 'a' | 'b') { |
| 69 | +>f3 : Symbol(f3, Decl(deferredLookupTypeResolution.ts, 20, 1)) |
| 70 | +>x : Symbol(x, Decl(deferredLookupTypeResolution.ts, 22, 12)) |
| 71 | + |
| 72 | + return f2(x); |
| 73 | +>f2 : Symbol(f2, Decl(deferredLookupTypeResolution.ts, 16, 91)) |
| 74 | +>x : Symbol(x, Decl(deferredLookupTypeResolution.ts, 22, 12)) |
| 75 | +} |
| 76 | + |
0 commit comments