-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Description
Search Terms
asynciterator asynciterable async iterable iterator
Suggestion
Add a dom.asynciterable option to --lib to support DOM types that define a Symbol.asyncIterator method.
Use Cases
The streams spec has recently been updated to add a Symbol.asyncIterator method to ReadableStream, making it the first DOM type to implement the ES2018 AsyncIterable interface.
I would like to update the type definitions for streams in TSJS-lib-generator to include this new async iterator method. However, this requires Symbol.asyncIterator, which is not available before ES2018 and thus cannot be readily used in the DOM type definitions.
Previously, a dom.iterable option was added to support DOM types that define a Symbol.iterator method. I think it would make sense to use this same strategy to support Symbol.asyncIterator.
Examples
TypeScript would have (generated) type definitions in lib/lib.dom.asynciterable.d.ts:
interface ReadableStream<R = any> {
[Symbol.asyncIterator](): AsyncIterator<R>;
}Users could then use a ReadableStream in a for await..of loop by compiling with --target es2018:
const readable = new ReadableStream<Uint8Array>();
for await (const chunk of readable) {
console.log(chunk);
}Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.