/// /// type IteratorResult = IteratorYieldResult | IteratorReturnResult; interface IteratorYieldResult { done: false; value: Yields; } interface IteratorReturnResult { done: true; value: Returns; } interface Iterator { // Takes either 0 or 1 arguments - doesn't accept 'undefined' next: (...args: [] | [Next]) => IteratorResult; } interface AsyncIterator { next: (...args: [] | [Next]) => Promise>; } interface Generator extends Iterator { next: (...args: [] | [Next]) => IteratorResult; [Symbol.iterator](): Generator; } interface AsyncGenerator extends AsyncIterator { next: (...args: [] | [Next]) => Promise>; [Symbol.asyncIterator](): AsyncGenerator; } interface AsyncIterable { [Symbol.asyncIterator](): AsyncIterator; } interface Iterable { [Symbol.iterator](): Iterator; } interface AsyncIterableIterator extends AsyncIterator { [Symbol.asyncIterator](): AsyncIterableIterator; } interface IterableIterator extends Iterator { [Symbol.iterator](): IterableIterator; } interface IterableFunction extends Iterable { (): T; }