柯里化(Currying)是一种将多参数函数转换为一系列使用一个参数的函数的技术。它通常用于将复杂的函数简化,以便于理解和使用。例如,可以将一个处理多个参数的函数转换为处理一个参数的函数序列,这样就可以更好地控制任务的执行流程。
// 三数之和
function threeSum(a: number, b: number, c: number): number {
return a + b + c
}
// 柯里化转换返回类型
type Curried<A extends any[], R> = A extends []
? () => R
: A extends [infer ARG]
? (p: ARG) => R
: A extends [infer ARG, ...infer REST]
? (p: ARG) => Curried<REST, R>
: never
// 柯里化转换函数
declare function curry<A extends any[], R>(func: (...args: A) => R): Curried<A, R>
const curriedThreeSum = curry(threeSum)
// 使用柯里化后的函数
const result = curriedThreeSum(1)(2)(3) // 结果为 6
评论区