@@ -357,6 +357,11 @@ export function bindActionCreators<
357
357
358
358
/* compose */
359
359
360
+ type Func0 < R > = ( ) => R ;
361
+ type Func1 < T1 , R > = ( a1 : T1 ) => R ;
362
+ type Func2 < T1 , T2 , R > = ( a1 : T1 , a2 : T2 ) => R ;
363
+ type Func3 < T1 , T2 , T3 , R > = ( a1 : T1 , a2 : T2 , a3 : T3 , ...args : any [ ] ) => R ;
364
+
360
365
/**
361
366
* Composes single-argument functions from right to left. The rightmost
362
367
* function can take multiple arguments as it provides the signature for the
@@ -367,27 +372,54 @@ export function bindActionCreators<
367
372
* to left. For example, `compose(f, g, h)` is identical to doing
368
373
* `(...args) => f(g(h(...args)))`.
369
374
*/
370
- export function compose ( ) : < R > ( a : R , ... args : any [ ] ) => R ;
375
+ export function compose ( ) : < R > ( a : R ) => R ;
371
376
372
- export function compose < A , R > (
373
- f1 : ( b : A ) => R ,
374
- f2 : ( ...args : any [ ] ) => A
375
- ) : ( ...args : any [ ] ) => R ;
377
+ export function compose < F extends Function > ( f : F ) : F ;
376
378
379
+ /* two functions */
380
+ export function compose < A , R > (
381
+ f1 : ( b : A ) => R , f2 : Func0 < A >
382
+ ) : Func0 < R > ;
383
+ export function compose < A , T1 , R > (
384
+ f1 : ( b : A ) => R , f2 : Func1 < T1 , A >
385
+ ) : Func1 < T1 , R > ;
386
+ export function compose < A , T1 , T2 , R > (
387
+ f1 : ( b : A ) => R , f2 : Func2 < T1 , T2 , A >
388
+ ) : Func2 < T1 , T2 , R > ;
389
+ export function compose < A , T1 , T2 , T3 , R > (
390
+ f1 : ( b : A ) => R , f2 : Func3 < T1 , T2 , T3 , A >
391
+ ) : Func3 < T1 , T2 , T3 , R > ;
392
+
393
+ /* three functions */
377
394
export function compose < A , B , R > (
378
- f1 : ( b : B ) => R ,
379
- f2 : ( a : A ) => B ,
380
- f3 : ( ...args : any [ ] ) => A
381
- ) : ( ...args : any [ ] ) => R ;
382
-
395
+ f1 : ( b : B ) => R , f2 : ( a : A ) => B , f3 : Func0 < A >
396
+ ) : Func0 < R > ;
397
+ export function compose < A , B , T1 , R > (
398
+ f1 : ( b : B ) => R , f2 : ( a : A ) => B , f3 : Func1 < T1 , A >
399
+ ) : Func1 < T1 , R > ;
400
+ export function compose < A , B , T1 , T2 , R > (
401
+ f1 : ( b : B ) => R , f2 : ( a : A ) => B , f3 : Func2 < T1 , T2 , A >
402
+ ) : Func2 < T1 , T2 , R > ;
403
+ export function compose < A , B , T1 , T2 , T3 , R > (
404
+ f1 : ( b : B ) => R , f2 : ( a : A ) => B , f3 : Func3 < T1 , T2 , T3 , A >
405
+ ) : Func3 < T1 , T2 , T3 , R > ;
406
+
407
+ /* four functions */
383
408
export function compose < A , B , C , R > (
384
- f1 : ( b : C ) => R ,
385
- f2 : ( a : B ) => C ,
386
- f3 : ( a : A ) => B ,
387
- f4 : ( ...args : any [ ] ) => A
388
- ) : ( ...args : any [ ] ) => R ;
389
-
390
- export function compose < R > (
391
- f1 : ( a : any ) => R ,
409
+ f1 : ( b : C ) => R , f2 : ( a : B ) => C , f3 : ( a : A ) => B , f4 : Func0 < A >
410
+ ) : Func0 < R > ;
411
+ export function compose < A , B , C , T1 , R > (
412
+ f1 : ( b : C ) => R , f2 : ( a : B ) => C , f3 : ( a : A ) => B , f4 : Func1 < T1 , A >
413
+ ) : Func1 < T1 , R > ;
414
+ export function compose < A , B , C , T1 , T2 , R > (
415
+ f1 : ( b : C ) => R , f2 : ( a : B ) => C , f3 : ( a : A ) => B , f4 : Func2 < T1 , T2 , A >
416
+ ) : Func2 < T1 , T2 , R > ;
417
+ export function compose < A , B , C , T1 , T2 , T3 , R > (
418
+ f1 : ( b : C ) => R , f2 : ( a : B ) => C , f3 : ( a : A ) => B , f4 : Func3 < T1 , T2 , T3 , A >
419
+ ) : Func3 < T1 , T2 , T3 , R > ;
420
+
421
+ /* rest */
422
+ export function compose < A , B , C , R > (
423
+ f1 : ( b : C ) => R , f2 : ( a : B ) => C , f3 : ( a : A ) => B ,
392
424
...funcs : Function [ ]
393
425
) : ( ...args : any [ ] ) => R ;
0 commit comments