TypeScript 基础指南:迭代器(Iterators)和生成器(Generators)

迭代器(Iterators)和生成器(Generators)是 JavaScript 和 TypeScript 中的两个非常强大的特性。

部分
1
迭代器(Iterators)

迭代器是一种特殊的对象,它定义了遍历数据源(如数组、字符串等)的标准方式。迭代器对象必须实现以下方法:

next(): 返回一个对象,该对象有两个属性
value
当前迭代的值
done
布尔值,表示是否迭代完成
下面是一个简单的迭代器示例:
const numbers = [1, 2, 3, 4, 5];

const numbersIterator = {
  index: 0,
  next() {
    if (this.index < numbers.length) {
      return { value: numbers[this.index++], done: false };
    } else {
      return { value: undefined, done: true };
    }
  }
};

while (true) {
  const result = numbersIterator.next();
  if (result.done) break;
  console.log(result.value);
}
// Output: 1 2 3 4 5
部分
2
生成器(Generators)

生成器是一种特殊的函数,它们可以暂停执行并在稍后恢复。生成器函数使用 function* 语法定义,并使用 yield 关键字产生值。 下面是一个使用生成器的例子:

function* generateNumbers() {
  yield 1;
  yield 2;
  yield 3;
  yield 4;
  yield 5;
}

const numbersGenerator = generateNumbers();
console.log(numbersGenerator.next().value); // 1
console.log(numbersGenerator.next().value); // 2
console.log(numbersGenerator.next().value); // 3
console.log(numbersGenerator.next().value); // 4
console.log(numbersGenerator.next().value); // 5
console.log(numbersGenerator.next().value); // undefined

在这个例子中,generateNumbers 函数是一个生成器函数,它使用 yield 关键字产生值。每次调用 next() 方法,生成器都会恢复执行并产生下一个值。

迭代器和生成器在 TypeScript 中的主要用途包括:
定义自定义迭代行为
可以使用迭代器和生成器定义自定义的迭代逻辑,扩展 JavaScript 的内置迭代行为。
实现流式 API
生成器可以用于实现流式 API,提供更加优雅和可控的数据处理方式。
遍历复杂数据结构
迭代器和生成器可以用于遍历复杂的数据结构,如树形结构、图等。
异步操作
生成器可以与 async/await 结合使用,简化异步代码的编写和维护。