什么是Iterable
Iterable是ES2015新增的一个Interface。Array,String都是Iterable。接受Iterable的原生语言特性包括:
- for-of 循环
- 数组解构(
[...arr]
) - Array.from()
- 创建Set
- 创建Map
Promise.all()
Promise.race()
yield*
Iterable具有Symbol.iterator
属性,该属性是一个函数,返回一个新的Iterator:
interface Iterable<T> {
[Symbol.iterator](): Iterator<T>;
}
Iterator是一个具有next方法的对象,该对象返回IteratorResult
interface Iterator<T, TReturn = any> {
next(): IteratorResult<T, TReturn>;
}
IteratorResult具有两个属性:done和value。done是个布尔值,当其为false时,说明迭代未结束,我们取用它的value。当它为true时,说明已经结束了,我们对value也不再关心了。
type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
interface IteratorYieldResult<TYield> {
done?: false;
value: TYield;
}
interface IteratorReturnResult<TReturn> {
done: true;
value: TReturn;
}