Closed
Description
@rbuckton Can you?
TypeScript Version: 3.7.x-dev.201xxxxx
Search Terms:
Code
// A *self-contained* demonstration of the problem follows...
// Test this by running `tsc` on the command-line, rather than through another build tool such as Gulp, Webpack, etc.
Expected behavior:
interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> extends AsyncIterator<T, TReturn, TNext> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): Promise<IteratorResult<awaited T, awaited TReturn>>;
return(value: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<awaited T, awaited TReturn>>;
throw(e: any): Promise<IteratorResult<awaited T, awaited TReturn>>;
[Symbol.asyncIterator](): AsyncGenerator<awaited T, awaited TReturn, TNext>;
}
interface AsyncIterator<T, TReturn = any, TNext = undefined> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): Promise<IteratorResult<awaited T, awaited TReturn>>;
return?(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<awaited T, awaited TReturn>>;
throw?(e?: any): Promise<IteratorResult<awaited T, awaited TReturn>>;
}
Actual behavior:
interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> extends AsyncIterator<T, TReturn, TNext> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
return(value: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;
throw(e: any): Promise<IteratorResult<T, TReturn>>;
[Symbol.asyncIterator](): AsyncGenerator<T, TReturn, TNext>;
}
interface AsyncIterator<T, TReturn = any, TNext = undefined> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
return?(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;
throw?(e?: any): Promise<IteratorResult<T, TReturn>>;
}
Playground Link:
Related Issues:
Metadata
Metadata
Assignees
Labels
No labels