柯里化

 * 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)
  }
}