Emit error when trying to iterate a value with union type with non-iterable constituent when --downlevelIterator #40288
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #39161 .
Example
code
Current Behavior
(no compile error)
New Behavior
Details of Code Change
This PR adds a
shouldIgnoreNonIterableUnionConstituent
parameter togetIterationTypesOfIterable
which, iffalse
is specified, returnsnoIterationTypes
whenever given union type includes a non-iterable constituent. Otherwise, non-iterable constituents are just ignored; for example, the yielded type ofnumber[] | undefined
is considerednumber
.I first considered making this the default behavior, but then one test failed (namely
generatorYieldContextualType.ts
). As the old behavior seemed kind of reasonable in some situations, I kept the change smaller by adding that parameter.