RecipesChapter 7: Variadic Tuple Types

Typing a Flexible curry Function

Recipe 7.4 from The TypeScript Cookbook

type Curried<A extends any[], R extends any> = A extends [infer F, ...infer L]
  ? <K extends Overloads<L>>(
      arg: F,
      ...args: K
    ) => Curried<Remove<L, K>, R>
  : R;
Open in TypeScript Playground →