我有一个帮助函数库,我想导出curried版本。无法导出咖喱通用函数
它的一小块看起来是这样的:
export function curry2<A,B,C>(f: (x: A, y: B) => C): (x: A) => (y: B) => C {
return (a) => (b) => f(a, b)
}
function _push<A>(item: A, items: Array<A>): Array<A> {
return items.concat(item)
}
export const push = curry2(push)
但是,这并不工作。流程抱怨表达curry2(push)
,他说:
- type parameter 'A' of function call. Missing annotation.
- type parameter 'B' of function call. Missing annotation.
所以,我想通过注释导出的标识符来解决这个问题:
export const push<A>: (item: A) => (items: Array<A>) => Array<A>
但是,这并不工作,因为const
表达式不能引入泛型类型变量。
所以我想我会为了导出实际功能,能够将其标注为:
export function push<A> (item: A): (items: Array<A>) => Array<A> {
return curry2(_push)(item);
}
但在这一点上,我基本上要咖喱对重新写一大块每个功能我想要导出。
有没有更好的方法来帮助Flow在常量表达式中填充导出的泛型类型变量?
这似乎有同样的问题。导出的'push'表示缺少类型参数A,B和C的注释。由于它是一个const声明,因此无法提供它们。 – Adam
我的意思是,目前这是不可能的,Flow不支持更高的亲属类型 – gcanti