zipAll函数的流类型是什么,例如在lodash / fp中?

时间:2017-06-17 20:04:54

标签: javascript functional-programming lodash flowtype

即使在正常的lodash中,也会使用重载来声明zip的类型,例如:

zip<A, B>(a1: A[], a2: B[]): Array<[A, B]>;
zip<A, B, C>(a1: A[], a2: B[], a3: C[]): Array<[A, B, C]>;
zip<A, B, C, D>(a1: A[], a2: B[], a3: C[], a4: D[]): Array<[A, B, C, D]>;
zip<A, B, C, D, E>(a1: A[], a2: B[], a3: C[], a4: D[], a5: E[]): Array<[A, B, C, D, E]>;

第一行符合zip的{​​{1}},但是lodash/fp呢? 这个函数应该采用二阶数组,基本上转置它。

对于上述有限的情况,它看起来像这样:

zipAll

一般无法定义它吗?

1 个答案:

答案 0 :(得分:1)

这不是一个很好的答案,但是:不,没有。这需要某种元编程层。

您可以看到在其他语言中应用的非常相似的模式,例如Haskell。即使Haskell的类型系统可以被认为更复杂,但它没有重载,zip使用新名称implemented for different sized tuples zipzip3,{{1}通常,Haskell的Prelude在定义这些类型的东西时会在7个参数处停止,因为无论如何代码通常都会变得不可读。