Allow calls ending with unions of tuples #55185
Closed
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.
Previously, only calls with tuples were allowed, not unions of tuples. For example, this already works:
But this does not:
This PR allows union types like these as the last argument. It's possible to allow them anywhere, but quite a bit more complicated. And the code is already complicated enough: getEffectiveCallArguments now needs to return the minimum number of arguments as well as the argument list (which is the maximum number of arguments).
Also, this transformation should not happen when the tuple union argument is passed to a tuple union rest parameter:
[number] | [string]
is assignable to[number] | [string]
but the transformednumber | string
is not. Checking for this requires passing around even more information.Bottom line: I'm not sure the complexity is worth the new code. However, if this is a good idea, there are 3 things that need to be cleaned up:
...T
types. Not done or tested, but straightfoward.Fixes #42508
Supercedes #43882, but does less than half of that PR, in less than half the code.