TypeScript和自定义迭代器

时间:2017-08-17 22:21:47

标签: typescript ecmascript-6 iterator

我想在TypeScript中为我的数组创建一个迭代器,我如何修复我的代码以避免出现转换错误?通过仿制药呢?

let array4 = [10, 20, 30];

array4[Symbol.iterator] = function () {
  let i = 0;
  return {
    next: function () {
      i++;
      return {
        value: i < 4 ? array4[i - 1] : undefined,
        done: i >= 4 ? true : false
      };
    }
  };
};

let it4 = array4[Symbol.iterator]();

console.log(it4.next());
console.log(it4.next());
console.log(it4.next());
console.log(it4.next());

3 个答案:

答案 0 :(得分:0)

像这样:

array4[Symbol.iterator] = function* () {
    let i = 0;
    while (i < 3) {
        i++;
        yield array4[i - 1];
    }
};

如果您愿意,可以在没有生成器功能的情况下执行此操作,我只需要找到IterableIterator<T>的正确签名。如果您需要帮助,请告诉我。

答案 1 :(得分:0)

您还可以考虑通用生成器功能。一个简单的例子如下:

INotifyPropertyChanged

希望它有所帮助。

答案 2 :(得分:0)

您可以尝试像这样的图书馆:https://github.com/labs42io/itiriri 然后您可以简单地做到:

q = query([10,20,30]);
q.take(2).toArray(); // [10,20]
q.filter(e => e > 10).toArray(); // [20,30]

等等。