Created
April 11, 2025 08:32
-
-
Save z7pz/ae58fba399b38a40ce0e69d1cff8d560 to your computer and use it in GitHub Desktop.
type challenge typescript curried.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type Curried<A, R, Args extends any[] = []> = A extends [] | |
? R | |
: A extends [infer Head, ...infer Tail] | |
? { (...args: [...Args, Head]): Curried<Tail, R> } & (Tail extends [] | |
? {} | |
: Curried<Tail, R, [...Args, Head]>) | |
: never; | |
declare function DynamicParamsCurrying<Args extends any[], Ret>( | |
fn: (...args: Args) => Ret | |
): Curried<Args, Ret>; | |
const add = (a: number, b: number, c: number) => a + b + c; | |
const three = add(1, 1, 1); | |
const curriedAdd = DynamicParamsCurrying(add); | |
const six = curriedAdd(1, 2, 3); | |
const seven = curriedAdd(1, 2)(4); | |
const eight = curriedAdd(2)(3)(4); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment