我写了一个迭代器类和一个压缩两个迭代器的方法,它有一个参数,类型声明如下:
zip<B>(other: Iterable<B> | Iterator<B>): ItIterator<[T, B]>
其中T
是this.next().value
的类型。
但是我不知道如何编写它,所以它接受任意数量的参数,并返回一个元组的迭代器,使得
ItIterator.prototype.zip.call([1][Symbol.iterator](), ['a'], [false])
将返回ItIterator<[number, string, boolean]>
有什么办法吗?
1条答案
按热度按时间wwtsj6pe1#
我会采取以下方法:
其思想是
zip()
是B
中的generic,other
可迭代对象的元素类型的元组类型,我的意思是,如果你调用zip(x, y, z)
,其中x
是Iterable<X>
,y
是Iterable<Y>
,z
是Iterable<Z>
,则类型自变量B
将是[X, Y, Z]
。这是通过使
other
的rest参数元组类型成为B
上的Map元组类型来实现的。那么输出类型是可变元组类型
[T, ...B]
的ItIterator<>
,其中我们将T
前置到B
的元组。让我们来测试一下:
看起来不错。注意我不会支持
因为对函数的
call()
方法的类型支持不能很好地与本身是泛型的函数一起工作,并且您最终得到的只是ItIterator<[any, ...any[]]>
的约束。Playground代码链接