curry
函数柯里化
参数
参数名 | 参数类型 | 参数说明 |
---|---|---|
fn | any | 需要柯里化函数 |
args | unknown[] | fn 函数参数 |
源代码&使用
ts
import { curry } from '@manzhixing/utilsxy';
function add(a, b) {
return a + b;
}
const add1 = curry(add, 1);
add1(2); // 3
ts
/*
* @Author: Chengbotao
* @Contact: https://github.com/chengbotao
*/
export function curry(fn: any, ...args: unknown[]) {
const len = fn.length;
return function (this: unknown, ...values: unknown[]) {
const lambdaArgs = Array.prototype.slice.call(values);
Array.prototype.push.apply(args, lambdaArgs);
if (args.length < len) {
return curry.call(this, fn, ...args);
} else {
return fn.apply(this, args);
}
};
}