diff --git a/lib/core.js b/lib/core.js index 9fa57c32d06..697882cf305 100644 --- a/lib/core.js +++ b/lib/core.js @@ -547,19 +547,21 @@ type IteratorResult = | { done: true, value?: Return } | { done: false, value: Yield }; -interface $Iterator<+Yield,+Return,-Next> { - @@iterator(): $Iterator; - next(value?: Next): IteratorResult; -} -type Iterator<+T> = $Iterator; - interface $Iterable<+Yield,+Return,-Next> { @@iterator(): $Iterator; } type Iterable<+T> = $Iterable; -interface Generator<+Yield,+Return,-Next> { - @@iterator(): $Iterator; +interface $Iterator<+Yield,+Return,-Next> implements $Iterable { + @@iterator(): this; + next(value?: Next): IteratorResult; + return?: (value: R) => IteratorResult; + throw?: (error?: any) => IteratorResult; +} +type Iterator<+T> = $Iterator; + +interface Generator<+Yield,+Return,-Next> implements $Iterator { + @@iterator(): this; next(value?: Next): IteratorResult; return(value: R): IteratorResult; throw(error?: any): IteratorResult; @@ -569,25 +571,27 @@ declare function $iterate(p: Iterable): T; /* Async Iterable/Iterator/Generator */ -interface $AsyncIterator<+Yield,+Return,-Next> { - @@asyncIterator(): $AsyncIterator; - next(value?: Next): Promise>; -} -type AsyncIterator<+T> = $AsyncIterator; - interface $AsyncIterable<+Yield,+Return,-Next> { @@asyncIterator(): $AsyncIterator; } type AsyncIterable<+T> = $AsyncIterable; -interface AsyncGenerator<+Yield,+Return,-Next> { - @@asyncIterator(): $AsyncIterator; +interface $AsyncIterator<+Yield,+Return,-Next> implements $AsyncIterable { + @@asyncIterator(): this; + next(value?: Next): Promise>; + return?: (value: R) => Promise>; + throw? (error?: any) => Promise>; +} +type AsyncIterator<+T> = $AsyncIterator; + +interface AsyncGenerator<+Yield,+Return,-Next> implements $AsyncIterator { + @@asyncIterator(): this; next(value?: Next): Promise>; return(value: R): Promise>; throw(error?: any): Promise>; } -declare function $asyncIterator(p: AsyncIterable): T; +declare function $asyncIterate(p: AsyncIterable): T; /* Maps and Sets */