@@ -160,7 +160,7 @@ type _Enumerate<A extends Array<unknown>, N extends number> = N extends A['lengt
160160 ? A
161161 : _Enumerate < _PrependNextNum < A > , N> & number ;
162162
163- export type Enumerate < N extends number > = number extends N
163+ type Enumerate < N extends number > = number extends N
164164 ? number
165165 : _Enumerate< [ ] , N > extends (infer E)[]
166166 ? E
@@ -172,6 +172,7 @@ function foo2<T extends unknown[]>(value: T): Enumerate<T['length']> {
172172
173173
174174//// [recursiveConditionalTypes.js]
175+ "use strict";
175176// Awaiting promises
176177function f11(tx, ta, ux, ua) {
177178 ta = ua ;
@@ -204,11 +205,88 @@ let five;
204205function foo2(value) {
205206 return value . length ; // Error
206207}
207- export { } ;
208208
209209
210210//// [recursiveConditionalTypes.d.ts]
211+ declare type __Awaited< T > = T extends null | undefined ? T : T extends PromiseLike< infer U > ? __Awaited< U > : T;
212+ declare type MyPromise< T > = {
213+ then < U > ( f : ( ( value : T ) => U | PromiseLike < U > ) | null | undefined ) : MyPromise < U > ;
214+ } ;
215+ declare type InfinitePromise< T > = Promise< InfinitePromise < T > > ;
216+ declare type P0 = __Awaited < Promise < string | Promise < MyPromise < number > | null> | undefined >> ;
217+ declare type P1 = __Awaited < any > ;
218+ declare type P2 = __Awaited< InfinitePromise < number > > ;
219+ declare function f11 < T , U extends T > (tx: T, ta: __Awaited< T > , ux: U, ua: __Awaited< U > ): void;
220+ declare type Flatten< T extends readonly unknown [ ] > = T extends unknown[] ? _Flatten< T > [] : readonly _Flatten< T > [];
221+ declare type _Flatten< T > = T extends readonly (infer U)[] ? _Flatten< U > : T;
222+ declare type InfiniteArray< T > = InfiniteArray< T > [];
223+ declare type B0 = Flatten< string [ ] [ ] [ ] > ;
224+ declare type B1 = Flatten< string [ ] [ ] | readonly ( number [ ] | boolean [ ] [ ] ) [ ] > ;
225+ declare type B2 = Flatten< InfiniteArray < string > > ;
226+ declare type B3 = B2 [ 0 ] ;
227+ declare type TupleOf < T , N extends number > = N extends N ? number extends N ? T[] : _TupleOf< T , N , [ ] > : never;
228+ declare type _TupleOf< T , N extends number , R extends unknown [ ] > = R['length'] extends N ? R : _TupleOf< T , N , [ T , ...R ] > ;
229+ declare type TT0 = TupleOf< string , 4 > ;
230+ declare type TT1 = TupleOf< number , 0 | 2 | 4 > ;
231+ declare type TT2 = TupleOf< number , number > ;
232+ declare type TT3 = TupleOf< number , any > ;
233+ declare type TT4 = TupleOf< number , 100 > ;
234+ declare type TT5 = TupleOf< number , 1000 > ;
235+ declare function f22< N extends number , M extends N > (tn: TupleOf< number , N > , tm: TupleOf< number , M > ): void;
236+ declare function f23< T > (t: TupleOf< T , 3 > ): T;
237+ interface Box< T > {
238+ value : T ;
239+ }
240+ declare type RecBox< T > = T | Box< RecBox < T > > ;
241+ declare type InfBox < T > = Box< InfBox < T > > ;
242+ declare function unbox < T > (box: RecBox< T > ): T;
243+ declare type T1 = Box< string > ;
244+ declare type T2 = Box< T1 > ;
245+ declare type T3 = Box< T2 > ;
246+ declare type T4 = Box< T3 > ;
247+ declare type T5 = Box< T4 > ;
248+ declare type T6 = Box< T5 > ;
249+ declare let b1: Box< Box < Box < Box < Box < Box < string > >>> >> ;
250+ declare let b2 : T6 ;
251+ declare let b3 : InfBox < string > ;
252+ declare let b4: {
253+ value : {
254+ value : {
255+ value : typeof b4 ;
256+ } ;
257+ } ;
258+ } ;
259+ declare type Box1< T > = {
260+ value : T ;
261+ } ;
262+ declare type Box2< T > = {
263+ value : T ;
264+ } ;
265+ declare function foo< T > (x: Box1< Box1 < T > > ) : T ;
266+ declare let z : Box2 < Box2 < string > > ;
267+ declare type Intersect < U extends any [ ] , R = unknown > = U extends [infer H, ...infer T] ? Intersect< T , R & H > : R;
268+ declare type QQ = Intersect< [ string [ ] , number [ ] , 7 ] > ;
269+ declare type Unpack1< T > = T extends (infer U)[] ? Unpack1< U > : T;
270+ declare type Unpack2< T > = T extends (infer U)[] ? Unpack2< U > : T;
271+ declare function f20< T , U extends T > (x: Unpack1< T > , y: Unpack2< T > ): void;
272+ declare type Grow1< T extends unknown [ ] , N extends number > = T['length'] extends N ? T : Grow1< [ number , ...T ] , N > ;
273+ declare type Grow2< T extends unknown [ ] , N extends number > = T['length'] extends N ? T : Grow2< [ string , ...T ] , N > ;
274+ declare function f21< T extends number > (x: Grow1< [ ] , T > , y: Grow2< [ ] , T > ): void;
275+ declare type ParseSuccess< R extends string > = {
276+ rest : R ;
277+ } ;
278+ declare type ParseManyWhitespace< S extends string > = S extends ` ${ infer R0 } ` ? ParseManyWhitespace< R0 > extends ParseSuccess< infer R1 > ? ParseSuccess< R1 > : null : ParseSuccess< S > ;
279+ declare type TP1 = ParseManyWhitespace< " foo "> ;
280+ declare type ParseManyWhitespace2< S extends string > = S extends ` ${ infer R0 } ` ? Helper< ParseManyWhitespace2 < R0 > > : ParseSuccess < S > ;
281+ declare type Helper< T > = T extends ParseSuccess< infer R > ? ParseSuccess< R > : null;
282+ declare type TP2 = ParseManyWhitespace2< " foo "> ;
283+ declare type NTuple< N extends number , Tup extends unknown [ ] = [ ] > = Tup['length'] extends N ? Tup : NTuple< N , [ ...Tup , unknown ] > ;
284+ declare type Add< A extends number , B extends number > = [
285+ ...NTuple< A > ,
286+ ...NTuple< B >
287+ ]['length'];
288+ declare let five: Add< 2 , 3 > ;
211289declare type _PrependNextNum< A extends Array < unknown > > = A [ 'length '] extends infer T ? [ T , ...A ] extends [ ...infer X ] ? X : never : never ;
212290declare type _Enumerate < A extends Array < unknown > , N extends number> = N extends A [ 'length '] ? A : _Enumerate < _PrependNextNum < A > , N> & number ;
213- export declare type Enumerate < N extends number > = number extends N ? number : _Enumerate< [ ] , N > extends (infer E)[] ? E : never;
214- export { } ;
291+ declare type Enumerate < N extends number > = number extends N ? number : _Enumerate< [ ] , N > extends (infer E)[] ? E : never;
292+ declare function foo2 < T extends unknown [ ] > (value: T): Enumerate < T [ ' length ' ] > ;
0 commit comments