【发布时间】:2017-01-18 19:46:41
【问题描述】:
我可以为具有一定数量参数的函数创建一个通用的柯里化函数。即)
function curry2<T1,T2,R>(func:(arg1:T1, arg2:T2) => R, param2: T2):(arg:T1) => R{
return (param1:T1) => func(param1, param2);
};
但是,我找不到一种(类型安全的)方法来为具有 任何 个参数的函数实现通用 curry 函数。在另一种语言中,我会将所有的柯里化函数(即:curry1、curry2、curry3 等)命名为相同的东西(curry),然后让函数重载来运行正确的 curry 实现。但是,打字稿不允许像这样的函数重载。
到处都写 curry2/curry1/curry3 而不是一个统一的 curry 接口并不是太麻烦,但如果有办法做到这一点,我会很感激知道如何做!
【问题讨论】:
-
窝。这是我的想法,但无论如何谢谢。
-
这不是 JavaScript。 JavaScript 和重载没有问题,因为 JavaScript 没有重载。 javascript 标签在这里不合适。
-
@Ryan 您提供的第二个链接是关于可变参数泛型的,这是另一回事。第一个是关于输入与
bind和apply相关的内容,但这在这里也没有直接关系。 -
你想在第二个参数中“咖喱”?不是“currying”的AFAIK。对于三个或更多参数的情况,您是否尝试部分应用最后一个参数?
标签: typescript generics functional-programming currying