【发布时间】:2021-09-14 18:43:17
【问题描述】:
我有一个实现 Tuple 的 Vector 类,像这样(简化代码,Tuple 接口基本上只是一个没有方法和固定大小 N 的数组):
interface Tuple<T, N extends number> extends ArrayLike<T>, Iterable<T> {
0: T
length: N
}
export class Vector<N extends number> implements Tuple<number, N> {
//Implementation
}
现在我想让我的 Vector 可迭代。当我创建一个 Tuple 类型的变量时,它已经是可迭代的,但 Vector 显然不是:
let t: Tuple<number,2> = [1,2]
for (const iterator of t) {...} //works
let v = new Vector([1,2])
for (const iterator of v) {....} //Type 'Vector<2>' must have a '[Symbol.iterator]()' method that returns an iterator.
我的问题是:如何在向量中实现“默认”迭代器,这样我就不必再次编写函数了?我可以以某种方式复制元组或数组迭代器吗? 如果这是不可能的,那么定义我的迭代器的最佳方法是什么?现在,我已将这个(生成器)方法添加到我的 Vector 类中:
*[Symbol.iterator](): Iterator<number, any, undefined> {
for (let i = 0; i < this.length; i++) {
yield this[i]
}
}
它有效,但我不能 100% 确定它实际在做什么,返回值 Iterator
【问题讨论】:
标签: typescript typescript-generics