即使在正常的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
一般无法定义它吗?
答案 0 :(得分:1)
这不是一个很好的答案,但是:不,没有。这需要某种元编程层。
您可以看到在其他语言中应用的非常相似的模式,例如Haskell。即使Haskell的类型系统可以被认为更复杂,但它没有重载,zip
使用新名称implemented for different sized tuples zip
,zip3
,{{1}通常,Haskell的Prelude在定义这些类型的东西时会在7个参数处停止,因为无论如何代码通常都会变得不可读。