From 4e547ba1c3c3af69dfc0a0d7c36c7a41f2001891 Mon Sep 17 00:00:00 2001 From: Nikolay Botev Date: Tue, 10 Sep 2024 15:04:35 +0300 Subject: [PATCH 1/6] Improve generic type signature of Iterator.from() --- src/lib/esnext.iterator.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/esnext.iterator.d.ts b/src/lib/esnext.iterator.d.ts index fe929f59c2206..8d62829c7e02d 100644 --- a/src/lib/esnext.iterator.d.ts +++ b/src/lib/esnext.iterator.d.ts @@ -123,7 +123,7 @@ declare global { * Returns its input if the input already inherits from the built-in Iterator class. * @param value An iterator or iterable object to convert a native iterator. */ - from(value: Iterator | Iterable): IteratorObject; + from(value: Iterator | Iterable): IteratorObject; } var Iterator: IteratorConstructor; From d8fcd4f23001fe1dd655e71459225de115fa2a9e Mon Sep 17 00:00:00 2001 From: Nikolay Botev Date: Tue, 10 Sep 2024 15:49:20 +0300 Subject: [PATCH 2/6] Add TNext argument and default value for TReturn --- src/lib/esnext.iterator.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/esnext.iterator.d.ts b/src/lib/esnext.iterator.d.ts index 8d62829c7e02d..7c0fa36df09e5 100644 --- a/src/lib/esnext.iterator.d.ts +++ b/src/lib/esnext.iterator.d.ts @@ -123,7 +123,7 @@ declare global { * Returns its input if the input already inherits from the built-in Iterator class. * @param value An iterator or iterable object to convert a native iterator. */ - from(value: Iterator | Iterable): IteratorObject; + from(value: Iterator | Iterable): IteratorObject; } var Iterator: IteratorConstructor; From c073b9fe1a56f3e84b0a7d00dae954494cf9f325 Mon Sep 17 00:00:00 2001 From: Nikolay Botev Date: Tue, 10 Sep 2024 16:39:36 +0300 Subject: [PATCH 3/6] Update baselines --- ...tUsingDeclarationsWithIteratorObject.types | 8 ++-- .../reference/builtinIterator.errors.txt | 21 +--------- .../baselines/reference/builtinIterator.types | 40 +++++++++---------- .../usingDeclarationsWithIteratorObject.types | 8 ++-- 4 files changed, 29 insertions(+), 48 deletions(-) diff --git a/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types b/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types index 54cd3d16dd0e9..2f71537add0ed 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types +++ b/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types @@ -56,12 +56,12 @@ async function f() { > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from(i) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >i : Iterator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/builtinIterator.errors.txt b/tests/baselines/reference/builtinIterator.errors.txt index c4fc043ee366e..947bfadea93aa 100644 --- a/tests/baselines/reference/builtinIterator.errors.txt +++ b/tests/baselines/reference/builtinIterator.errors.txt @@ -20,15 +20,6 @@ builtinIterator.ts(60,3): error TS2416: Property 'next' in type 'BadIterator3' i Type '{ done: boolean; value: number; }' is not assignable to type 'IteratorYieldResult'. Types of property 'done' are incompatible. Type 'boolean' is not assignable to type 'false'. -builtinIterator.ts(70,29): error TS2345: Argument of type 'Generator' is not assignable to parameter of type 'Iterator | Iterable'. - Type 'Generator' is not assignable to type 'Iterator'. - Types of property 'next' are incompatible. - Type '(...[value]: [] | [boolean]) => IteratorResult' is not assignable to type '(...[value]: [] | [undefined]) => IteratorResult'. - Types of parameters '__0' and '__0' are incompatible. - Type '[] | [undefined]' is not assignable to type '[] | [boolean]'. - Type '[undefined]' is not assignable to type '[] | [boolean]'. - Type '[undefined]' is not assignable to type '[boolean]'. - Type 'undefined' is not assignable to type 'boolean'. builtinIterator.ts(73,35): error TS2322: Type 'Generator' is not assignable to type 'Iterator | Iterable'. Type 'Generator' is not assignable to type 'Iterator'. Types of property 'next' are incompatible. @@ -40,7 +31,7 @@ builtinIterator.ts(73,35): error TS2322: Type 'Generator; const iter1 = Iterator.from(g1); - ~~ -!!! error TS2345: Argument of type 'Generator' is not assignable to parameter of type 'Iterator | Iterable'. -!!! error TS2345: Type 'Generator' is not assignable to type 'Iterator'. -!!! error TS2345: Types of property 'next' are incompatible. -!!! error TS2345: Type '(...[value]: [] | [boolean]) => IteratorResult' is not assignable to type '(...[value]: [] | [undefined]) => IteratorResult'. -!!! error TS2345: Types of parameters '__0' and '__0' are incompatible. -!!! error TS2345: Type '[] | [undefined]' is not assignable to type '[] | [boolean]'. -!!! error TS2345: Type '[undefined]' is not assignable to type '[] | [boolean]'. -!!! error TS2345: Type '[undefined]' is not assignable to type '[boolean]'. -!!! error TS2345: Type 'undefined' is not assignable to type 'boolean'. declare const iter2: IteratorObject; const iter3 = iter2.flatMap(() => g1); diff --git a/tests/baselines/reference/builtinIterator.types b/tests/baselines/reference/builtinIterator.types index 75d934cddae8c..bcef74d4c3263 100644 --- a/tests/baselines/reference/builtinIterator.types +++ b/tests/baselines/reference/builtinIterator.types @@ -6,12 +6,12 @@ const iterator = Iterator.from([0, 1, 2]); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from([0, 1, 2]) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >[0, 1, 2] : number[] > : ^^^^^^^^ >0 : 0 @@ -86,16 +86,16 @@ const zero = iterator.filter(isZero); > : ^ ^^ ^^^^^ const iteratorFromBare = Iterator.from({ ->iteratorFromBare : IteratorObject -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from({ next() { return { done: Math.random() < .5, value: "a string", }; },}) : IteratorObject -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>iteratorFromBare : IteratorObject +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Iterator.from({ next() { return { done: Math.random() < .5, value: "a string", }; },}) : IteratorObject +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >{ next() { return { done: Math.random() < .5, value: "a string", }; },} : { next(): { done: boolean; value: string; }; } > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -393,16 +393,16 @@ declare const g1: Generator; > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const iter1 = Iterator.from(g1); ->iter1 : IteratorObject -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from(g1) : IteratorObject -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>iter1 : IteratorObject +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Iterator.from(g1) : IteratorObject +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >g1 : Generator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/usingDeclarationsWithIteratorObject.types b/tests/baselines/reference/usingDeclarationsWithIteratorObject.types index ae0dcfe5b55db..7bba447e9b915 100644 --- a/tests/baselines/reference/usingDeclarationsWithIteratorObject.types +++ b/tests/baselines/reference/usingDeclarationsWithIteratorObject.types @@ -56,12 +56,12 @@ function f() { > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from(i) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ >i : Iterator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 667ef7fb4d506fa4fafeb7015795e0bba4ec7357 Mon Sep 17 00:00:00 2001 From: Nikolay Botev Date: Tue, 10 Sep 2024 17:27:28 +0300 Subject: [PATCH 4/6] Add test case for iterator returned from Iterator.from() passing along the return value of the wrapped iterator --- .../reference/builtinIterator.errors.txt | 11 +++- tests/baselines/reference/builtinIterator.js | 18 ++++++- .../reference/builtinIterator.symbols | 25 ++++++++++ .../baselines/reference/builtinIterator.types | 50 +++++++++++++++++++ tests/cases/compiler/builtinIterator.ts | 10 +++- 5 files changed, 111 insertions(+), 3 deletions(-) diff --git a/tests/baselines/reference/builtinIterator.errors.txt b/tests/baselines/reference/builtinIterator.errors.txt index 947bfadea93aa..6559584fa023a 100644 --- a/tests/baselines/reference/builtinIterator.errors.txt +++ b/tests/baselines/reference/builtinIterator.errors.txt @@ -142,4 +142,13 @@ builtinIterator.ts(73,35): error TS2322: Type 'Generator; const iter1 = Iterator.from(g1); declare const iter2: IteratorObject; -const iter3 = iter2.flatMap(() => g1); +const iter3 = iter2.flatMap(() => g1); + +// Iterator.from pass-through of return value +const customGenerator = function* () { + return 42; +}(); +const withHelpers = Iterator.from(customGenerator); +const result = withHelpers.next(); +const resultValue: number = result.value; // this should work + //// [builtinIterator.js] "use strict"; @@ -134,3 +143,10 @@ class BadIterator3 extends Iterator { } const iter1 = Iterator.from(g1); const iter3 = iter2.flatMap(() => g1); +// Iterator.from pass-through of return value +const customGenerator = function* () { + return 42; +}(); +const withHelpers = Iterator.from(customGenerator); +const result = withHelpers.next(); +const resultValue = result.value; // this should work diff --git a/tests/baselines/reference/builtinIterator.symbols b/tests/baselines/reference/builtinIterator.symbols index 34ba5eea534dd..2a76a6bd4b739 100644 --- a/tests/baselines/reference/builtinIterator.symbols +++ b/tests/baselines/reference/builtinIterator.symbols @@ -193,3 +193,28 @@ const iter3 = iter2.flatMap(() => g1); >flatMap : Symbol(IteratorObject.flatMap, Decl(lib.esnext.iterator.d.ts, --, --)) >g1 : Symbol(g1, Decl(builtinIterator.ts, 68, 13)) +// Iterator.from pass-through of return value +const customGenerator = function* () { +>customGenerator : Symbol(customGenerator, Decl(builtinIterator.ts, 75, 5)) + + return 42; +}(); +const withHelpers = Iterator.from(customGenerator); +>withHelpers : Symbol(withHelpers, Decl(builtinIterator.ts, 78, 5)) +>Iterator.from : Symbol(IteratorConstructor.from, Decl(lib.esnext.iterator.d.ts, --, --)) +>Iterator : Symbol(Iterator, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.esnext.iterator.d.ts, --, --)) +>from : Symbol(IteratorConstructor.from, Decl(lib.esnext.iterator.d.ts, --, --)) +>customGenerator : Symbol(customGenerator, Decl(builtinIterator.ts, 75, 5)) + +const result = withHelpers.next(); +>result : Symbol(result, Decl(builtinIterator.ts, 79, 5)) +>withHelpers.next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>withHelpers : Symbol(withHelpers, Decl(builtinIterator.ts, 78, 5)) +>next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) + +const resultValue: number = result.value; // this should work +>resultValue : Symbol(resultValue, Decl(builtinIterator.ts, 80, 5)) +>result.value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>result : Symbol(result, Decl(builtinIterator.ts, 79, 5)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + diff --git a/tests/baselines/reference/builtinIterator.types b/tests/baselines/reference/builtinIterator.types index bcef74d4c3263..1535560939aca 100644 --- a/tests/baselines/reference/builtinIterator.types +++ b/tests/baselines/reference/builtinIterator.types @@ -426,3 +426,53 @@ const iter3 = iter2.flatMap(() => g1); >g1 : Generator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// Iterator.from pass-through of return value +const customGenerator = function* () { +>customGenerator : Generator +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { return 42;}() : Generator +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { return 42;} : () => Generator +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + return 42; +>42 : 42 +> : ^^ + +}(); +const withHelpers = Iterator.from(customGenerator); +>withHelpers : IteratorObject +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Iterator.from(customGenerator) : IteratorObject +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>Iterator : IteratorConstructor +> : ^^^^^^^^^^^^^^^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>customGenerator : Generator +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const result = withHelpers.next(); +>result : IteratorResult +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>withHelpers.next() : IteratorResult +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>withHelpers.next : (...[value]: [] | [unknown]) => IteratorResult +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>withHelpers : IteratorObject +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...[value]: [] | [unknown]) => IteratorResult +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const resultValue: number = result.value; // this should work +>resultValue : number +> : ^^^^^^ +>result.value : number +> : ^^^^^^ +>result : IteratorResult +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>value : number +> : ^^^^^^ + diff --git a/tests/cases/compiler/builtinIterator.ts b/tests/cases/compiler/builtinIterator.ts index e80bda3e44ab1..91f1b028c7fe9 100644 --- a/tests/cases/compiler/builtinIterator.ts +++ b/tests/cases/compiler/builtinIterator.ts @@ -73,4 +73,12 @@ declare const g1: Generator; const iter1 = Iterator.from(g1); declare const iter2: IteratorObject; -const iter3 = iter2.flatMap(() => g1); \ No newline at end of file +const iter3 = iter2.flatMap(() => g1); + +// Iterator.from pass-through of return value +const customGenerator = function* () { + return 42; +}(); +const withHelpers = Iterator.from(customGenerator); +const result = withHelpers.next(); +const resultValue: number = result.value; // this should work From 36bedbf0fd03779cafc7368baf57a8c7f81dcda4 Mon Sep 17 00:00:00 2001 From: Nikolay Botev Date: Tue, 10 Sep 2024 19:11:27 +0300 Subject: [PATCH 5/6] Rename type parameter TResult in Iterator class to TReturn for consistency --- src/lib/esnext.iterator.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/esnext.iterator.d.ts b/src/lib/esnext.iterator.d.ts index 7c0fa36df09e5..6176be4a65de1 100644 --- a/src/lib/esnext.iterator.d.ts +++ b/src/lib/esnext.iterator.d.ts @@ -7,12 +7,12 @@ export {}; // Abstract type that allows us to mark `next` as `abstract` -declare abstract class Iterator { // eslint-disable-line @typescript-eslint/no-unsafe-declaration-merging - abstract next(value?: TNext): IteratorResult; +declare abstract class Iterator { // eslint-disable-line @typescript-eslint/no-unsafe-declaration-merging + abstract next(value?: TNext): IteratorResult; } // Merge all members of `IteratorObject` into `Iterator` -interface Iterator extends globalThis.IteratorObject {} +interface Iterator extends globalThis.IteratorObject {} // Capture the `Iterator` constructor in a type we can use in the `extends` clause of `IteratorConstructor`. type IteratorObjectConstructor = typeof Iterator; From 80a059e9f2c175206b21d6d5433858f41db3285c Mon Sep 17 00:00:00 2001 From: Nikolay Botev Date: Tue, 10 Sep 2024 19:29:52 +0300 Subject: [PATCH 6/6] Revert addition of TNext type argument to Iterator.from --- src/lib/esnext.iterator.d.ts | 2 +- ...tUsingDeclarationsWithIteratorObject.types | 8 ++--- .../reference/builtinIterator.errors.txt | 21 +++++++++++- .../baselines/reference/builtinIterator.types | 32 +++++++++---------- .../usingDeclarationsWithIteratorObject.types | 8 ++--- 5 files changed, 45 insertions(+), 26 deletions(-) diff --git a/src/lib/esnext.iterator.d.ts b/src/lib/esnext.iterator.d.ts index 6176be4a65de1..994cde1639216 100644 --- a/src/lib/esnext.iterator.d.ts +++ b/src/lib/esnext.iterator.d.ts @@ -123,7 +123,7 @@ declare global { * Returns its input if the input already inherits from the built-in Iterator class. * @param value An iterator or iterable object to convert a native iterator. */ - from(value: Iterator | Iterable): IteratorObject; + from(value: Iterator | Iterable): IteratorObject; } var Iterator: IteratorConstructor; diff --git a/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types b/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types index 2f71537add0ed..1e07140315252 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types +++ b/tests/baselines/reference/awaitUsingDeclarationsWithIteratorObject.types @@ -56,12 +56,12 @@ async function f() { > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from(i) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >i : Iterator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/builtinIterator.errors.txt b/tests/baselines/reference/builtinIterator.errors.txt index 6559584fa023a..f653652343897 100644 --- a/tests/baselines/reference/builtinIterator.errors.txt +++ b/tests/baselines/reference/builtinIterator.errors.txt @@ -20,6 +20,15 @@ builtinIterator.ts(60,3): error TS2416: Property 'next' in type 'BadIterator3' i Type '{ done: boolean; value: number; }' is not assignable to type 'IteratorYieldResult'. Types of property 'done' are incompatible. Type 'boolean' is not assignable to type 'false'. +builtinIterator.ts(70,29): error TS2345: Argument of type 'Generator' is not assignable to parameter of type 'Iterator | Iterable'. + Type 'Generator' is not assignable to type 'Iterator'. + Types of property 'next' are incompatible. + Type '(...[value]: [] | [boolean]) => IteratorResult' is not assignable to type '(...[value]: [] | [undefined]) => IteratorResult'. + Types of parameters '__0' and '__0' are incompatible. + Type '[] | [undefined]' is not assignable to type '[] | [boolean]'. + Type '[undefined]' is not assignable to type '[] | [boolean]'. + Type '[undefined]' is not assignable to type '[boolean]'. + Type 'undefined' is not assignable to type 'boolean'. builtinIterator.ts(73,35): error TS2322: Type 'Generator' is not assignable to type 'Iterator | Iterable'. Type 'Generator' is not assignable to type 'Iterator'. Types of property 'next' are incompatible. @@ -31,7 +40,7 @@ builtinIterator.ts(73,35): error TS2322: Type 'Generator; const iter1 = Iterator.from(g1); + ~~ +!!! error TS2345: Argument of type 'Generator' is not assignable to parameter of type 'Iterator | Iterable'. +!!! error TS2345: Type 'Generator' is not assignable to type 'Iterator'. +!!! error TS2345: Types of property 'next' are incompatible. +!!! error TS2345: Type '(...[value]: [] | [boolean]) => IteratorResult' is not assignable to type '(...[value]: [] | [undefined]) => IteratorResult'. +!!! error TS2345: Types of parameters '__0' and '__0' are incompatible. +!!! error TS2345: Type '[] | [undefined]' is not assignable to type '[] | [boolean]'. +!!! error TS2345: Type '[undefined]' is not assignable to type '[] | [boolean]'. +!!! error TS2345: Type '[undefined]' is not assignable to type '[boolean]'. +!!! error TS2345: Type 'undefined' is not assignable to type 'boolean'. declare const iter2: IteratorObject; const iter3 = iter2.flatMap(() => g1); diff --git a/tests/baselines/reference/builtinIterator.types b/tests/baselines/reference/builtinIterator.types index 1535560939aca..e79a40cbd2537 100644 --- a/tests/baselines/reference/builtinIterator.types +++ b/tests/baselines/reference/builtinIterator.types @@ -6,12 +6,12 @@ const iterator = Iterator.from([0, 1, 2]); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from([0, 1, 2]) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >[0, 1, 2] : number[] > : ^^^^^^^^ >0 : 0 @@ -90,12 +90,12 @@ const iteratorFromBare = Iterator.from({ > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from({ next() { return { done: Math.random() < .5, value: "a string", }; },}) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >{ next() { return { done: Math.random() < .5, value: "a string", }; },} : { next(): { done: boolean; value: string; }; } > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -397,12 +397,12 @@ const iter1 = Iterator.from(g1); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from(g1) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >g1 : Generator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -445,12 +445,12 @@ const withHelpers = Iterator.from(customGenerator); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from(customGenerator) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >customGenerator : Generator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/usingDeclarationsWithIteratorObject.types b/tests/baselines/reference/usingDeclarationsWithIteratorObject.types index 7bba447e9b915..04d211f532415 100644 --- a/tests/baselines/reference/usingDeclarationsWithIteratorObject.types +++ b/tests/baselines/reference/usingDeclarationsWithIteratorObject.types @@ -56,12 +56,12 @@ function f() { > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Iterator.from(i) : IteratorObject > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->Iterator.from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>Iterator.from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >Iterator : IteratorConstructor > : ^^^^^^^^^^^^^^^^^^^ ->from : (value: Iterator | Iterable) => IteratorObject -> : ^ ^^ ^^^^^^^^ ^^^^^^^^ ^^ ^^^^^ +>from : (value: Iterator | Iterable) => IteratorObject +> : ^ ^^ ^^^^^^^^ ^^ ^^^^^ >i : Iterator > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^