TypeScriptのIterator
.next()を持つ
タイトルはTypeScriptの~~じゃなくてJavaScriptの~~でも良いんだけど、型の話をしたいのもあるのでTypeScriptの~~で良いかな、になっているmrsekut.icon
関連する型
Iterator<T>
code:ts
interface Iterator<T> {
next(value?: any): IteratorResult<T>;
return?(value?: any): IteratorResult<T>;
throw?(e?: any): IteratorResult<T>;
}
IteratorResult<T>
code:ts
interface IteratorResult<T> {
done: boolean;
value: T;
}
Iteratorの型定義ファイルは以下
code:ts
// Iterable.prototype.next() の戻り値
type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
interface IteratorYieldResult<TYield> {
done?: false;// まだ反復可能
value: TYield;// 反復した結果
}
interface IteratorReturnResult<TReturn> {
done: true;// 終了
value: TReturn;// 反復した結果
}
// Iterator protocol
interface Iterator<T, TReturn = any, TNext = undefined> {
// 引数は0か1個。undefinedは不可
next(...args: [] | TNext): IteratorResult<T, TReturn>; return?(value?: TReturn): IteratorResult<T, TReturn>;
throw?(e?: any): IteratorResult<T, TReturn>;
}
Iteratorの型パラメータは
yieldする型
returnする型
nextが受け入れる型
Iteratorのから値を取り出すための構文
for .. ofでそれができる
内部的に.done()が呼ばれるまで繰り返す
code:ts
for(var v of iter) console.log(v);
参考