Javascript 常见问题

柯里化

‌函数柯里化(Currying)是一种将接受多个参数的函数转换为接受单个参数的函数的技术。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const curry = <T extends (...args: any[]) => any>(fn: T): CurryFunction<T> => {
let args: any[] = [];
return function curryFunction(this: any, arg: any) {
args.push(arg);
if (args.length >= fn.length) return fn.apply(this, args);
return curryFunction;
} as CurryFunction<T>;
};

type CurryFunction<T extends (...args: any[]) => any> = T extends (
...args: infer P
) => infer R
? P extends [infer F, ...infer Rest]
? (arg: F) => CurryFunction<(...args: Rest) => R>
: R
: never;

const a = curry((a: string, b: boolean, c: number): void => {
console.log(a, b, c);
});

反柯里化

1

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2025 SunZhiqi

此时无声胜有声!

支付宝
微信