kakasoo

Currying, 인자를 커링으로 변경하는 타입 본문

프로그래밍/TypeScript

Currying, 인자를 커링으로 변경하는 타입

카카수(kakasoo) 2023. 12. 3. 16:35
반응형

이 정도는 가뿐했다.

// your answers

type Shift<T extends any[]> = T extends [infer F, ...infer Rest] ? Rest : never;

declare function Currying<T extends Function>(fn: T): 
  T extends (...params: infer Params) => infer R 
    ? Params['length'] extends 0 ? () => ReturnType<T>
      : Params['length'] extends 1
        ? (p: Params[0]) => ReturnType<T>
        : (p: Params[0]) => ReturnType<typeof Currying<(...nextFnParams: Shift<Params>) => R>>
    : never;
반응형