* const add = (a: number, b: number, c: number) => a + b + c
* const curriedAdd = curry(add)
*
* curriedAdd(1)(2)(3) // 6
* curriedAdd(1, 2)(3) // 6
* curriedAdd(1)(2, 3) // 6
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export default function curry<T extends (...args: any[]) => any>(func: T) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return function curried(...args: any[]): any {
if (args.length < func.length) {
return curried.bind(null, ...args)
}
return func(...args)
}
}