|
| 1 | +=== tests/cases/compiler/tailRecursiveConditionalTypes.ts === |
| 2 | +type Trim<S extends string> = |
| 3 | +>Trim : Symbol(Trim, Decl(tailRecursiveConditionalTypes.ts, 0, 0)) |
| 4 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 0, 10)) |
| 5 | + |
| 6 | + S extends ` ${infer T}` ? Trim<T> : |
| 7 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 0, 10)) |
| 8 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 1, 23)) |
| 9 | +>Trim : Symbol(Trim, Decl(tailRecursiveConditionalTypes.ts, 0, 0)) |
| 10 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 1, 23)) |
| 11 | + |
| 12 | + S extends `${infer T} ` ? Trim<T> : |
| 13 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 0, 10)) |
| 14 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 2, 22)) |
| 15 | +>Trim : Symbol(Trim, Decl(tailRecursiveConditionalTypes.ts, 0, 0)) |
| 16 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 2, 22)) |
| 17 | + |
| 18 | + S; |
| 19 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 0, 10)) |
| 20 | + |
| 21 | +type T10 = Trim<' hello '>; |
| 22 | +>T10 : Symbol(T10, Decl(tailRecursiveConditionalTypes.ts, 3, 6)) |
| 23 | +>Trim : Symbol(Trim, Decl(tailRecursiveConditionalTypes.ts, 0, 0)) |
| 24 | + |
| 25 | +type T11 = Trim<' hello '>; |
| 26 | +>T11 : Symbol(T11, Decl(tailRecursiveConditionalTypes.ts, 5, 170)) |
| 27 | +>Trim : Symbol(Trim, Decl(tailRecursiveConditionalTypes.ts, 0, 0)) |
| 28 | + |
| 29 | +type GetChars<S> = GetCharsRec<S, never>; |
| 30 | +>GetChars : Symbol(GetChars, Decl(tailRecursiveConditionalTypes.ts, 6, 170)) |
| 31 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 8, 14)) |
| 32 | +>GetCharsRec : Symbol(GetCharsRec, Decl(tailRecursiveConditionalTypes.ts, 8, 41)) |
| 33 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 8, 14)) |
| 34 | + |
| 35 | +type GetCharsRec<S, Acc> = |
| 36 | +>GetCharsRec : Symbol(GetCharsRec, Decl(tailRecursiveConditionalTypes.ts, 8, 41)) |
| 37 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 9, 17)) |
| 38 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 9, 19)) |
| 39 | + |
| 40 | + S extends `${infer Char}${infer Rest}` ? GetCharsRec<Rest, Char | Acc> : Acc; |
| 41 | +>S : Symbol(S, Decl(tailRecursiveConditionalTypes.ts, 9, 17)) |
| 42 | +>Char : Symbol(Char, Decl(tailRecursiveConditionalTypes.ts, 10, 22)) |
| 43 | +>Rest : Symbol(Rest, Decl(tailRecursiveConditionalTypes.ts, 10, 35)) |
| 44 | +>GetCharsRec : Symbol(GetCharsRec, Decl(tailRecursiveConditionalTypes.ts, 8, 41)) |
| 45 | +>Rest : Symbol(Rest, Decl(tailRecursiveConditionalTypes.ts, 10, 35)) |
| 46 | +>Char : Symbol(Char, Decl(tailRecursiveConditionalTypes.ts, 10, 22)) |
| 47 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 9, 19)) |
| 48 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 9, 19)) |
| 49 | + |
| 50 | +type T20 = GetChars<'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'>; |
| 51 | +>T20 : Symbol(T20, Decl(tailRecursiveConditionalTypes.ts, 10, 81)) |
| 52 | +>GetChars : Symbol(GetChars, Decl(tailRecursiveConditionalTypes.ts, 6, 170)) |
| 53 | + |
| 54 | +type Reverse<T> = any[] extends T ? T : ReverseRec<T, []>; |
| 55 | +>Reverse : Symbol(Reverse, Decl(tailRecursiveConditionalTypes.ts, 12, 86)) |
| 56 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 14, 13)) |
| 57 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 14, 13)) |
| 58 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 14, 13)) |
| 59 | +>ReverseRec : Symbol(ReverseRec, Decl(tailRecursiveConditionalTypes.ts, 14, 58)) |
| 60 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 14, 13)) |
| 61 | + |
| 62 | +type ReverseRec<T, Acc extends unknown[]> = |
| 63 | +>ReverseRec : Symbol(ReverseRec, Decl(tailRecursiveConditionalTypes.ts, 14, 58)) |
| 64 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 15, 16)) |
| 65 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 15, 18)) |
| 66 | + |
| 67 | + T extends [infer Head, ...infer Tail] ? ReverseRec<Tail, [Head, ...Acc]> : Acc; |
| 68 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 15, 16)) |
| 69 | +>Head : Symbol(Head, Decl(tailRecursiveConditionalTypes.ts, 16, 20)) |
| 70 | +>Tail : Symbol(Tail, Decl(tailRecursiveConditionalTypes.ts, 16, 35)) |
| 71 | +>ReverseRec : Symbol(ReverseRec, Decl(tailRecursiveConditionalTypes.ts, 14, 58)) |
| 72 | +>Tail : Symbol(Tail, Decl(tailRecursiveConditionalTypes.ts, 16, 35)) |
| 73 | +>Head : Symbol(Head, Decl(tailRecursiveConditionalTypes.ts, 16, 20)) |
| 74 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 15, 18)) |
| 75 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 15, 18)) |
| 76 | + |
| 77 | +type T30 = Reverse<[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>; |
| 78 | +>T30 : Symbol(T30, Decl(tailRecursiveConditionalTypes.ts, 16, 83)) |
| 79 | +>Reverse : Symbol(Reverse, Decl(tailRecursiveConditionalTypes.ts, 12, 86)) |
| 80 | + |
| 81 | +type T31 = Reverse<string[]>; |
| 82 | +>T31 : Symbol(T31, Decl(tailRecursiveConditionalTypes.ts, 18, 171)) |
| 83 | +>Reverse : Symbol(Reverse, Decl(tailRecursiveConditionalTypes.ts, 12, 86)) |
| 84 | + |
| 85 | +type TupleOf<T, N extends number> = number extends N ? T[] : TupleOfRec<T, N, []>; |
| 86 | +>TupleOf : Symbol(TupleOf, Decl(tailRecursiveConditionalTypes.ts, 19, 29)) |
| 87 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 21, 13)) |
| 88 | +>N : Symbol(N, Decl(tailRecursiveConditionalTypes.ts, 21, 15)) |
| 89 | +>N : Symbol(N, Decl(tailRecursiveConditionalTypes.ts, 21, 15)) |
| 90 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 21, 13)) |
| 91 | +>TupleOfRec : Symbol(TupleOfRec, Decl(tailRecursiveConditionalTypes.ts, 21, 82)) |
| 92 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 21, 13)) |
| 93 | +>N : Symbol(N, Decl(tailRecursiveConditionalTypes.ts, 21, 15)) |
| 94 | + |
| 95 | +type TupleOfRec<T, N extends number, Acc extends unknown[]> = |
| 96 | +>TupleOfRec : Symbol(TupleOfRec, Decl(tailRecursiveConditionalTypes.ts, 21, 82)) |
| 97 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 22, 16)) |
| 98 | +>N : Symbol(N, Decl(tailRecursiveConditionalTypes.ts, 22, 18)) |
| 99 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 22, 36)) |
| 100 | + |
| 101 | + Acc["length"] extends N ? Acc : TupleOfRec<T, N, [T, ...Acc]>; |
| 102 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 22, 36)) |
| 103 | +>N : Symbol(N, Decl(tailRecursiveConditionalTypes.ts, 22, 18)) |
| 104 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 22, 36)) |
| 105 | +>TupleOfRec : Symbol(TupleOfRec, Decl(tailRecursiveConditionalTypes.ts, 21, 82)) |
| 106 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 22, 16)) |
| 107 | +>N : Symbol(N, Decl(tailRecursiveConditionalTypes.ts, 22, 18)) |
| 108 | +>T : Symbol(T, Decl(tailRecursiveConditionalTypes.ts, 22, 16)) |
| 109 | +>Acc : Symbol(Acc, Decl(tailRecursiveConditionalTypes.ts, 22, 36)) |
| 110 | + |
| 111 | +type T40 = TupleOf<any, 200>; |
| 112 | +>T40 : Symbol(T40, Decl(tailRecursiveConditionalTypes.ts, 23, 66)) |
| 113 | +>TupleOf : Symbol(TupleOf, Decl(tailRecursiveConditionalTypes.ts, 19, 29)) |
| 114 | + |
| 115 | +type T41 = TupleOf<any, number>; |
| 116 | +>T41 : Symbol(T41, Decl(tailRecursiveConditionalTypes.ts, 25, 29)) |
| 117 | +>TupleOf : Symbol(TupleOf, Decl(tailRecursiveConditionalTypes.ts, 19, 29)) |
| 118 | + |
0 commit comments