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.
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix Callback argument type not inferred for union of interfaces #59309 #59672
base: main
Are you sure you want to change the base?
Fix Callback argument type not inferred for union of interfaces #59309 #59672
Changes from 4 commits
25b5914
effe3a0
ed2bfa4
2e530af
ac64f64
6eaf5e3
f69d6e1
8b0b855
8a3b095
dcb8f5d
4fd6bbd
381e4e0
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You need to account for rest parameters here so it would be more appropriate to use
getParameterCount
here over directly checking the.parameters.length
. Please also consider cases likeBoth of those signatures have the same parameter count but perhaps you'd like to specifically sort one of them as the first one.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you. I think that actually what I need is
getMinArgumentCount
.For the case
((a: string, b?: string) => void) | ((a: string, ...rest: string[]) => void)
I don't think it matters which one is first.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure if it will make any difference but to exercise even more funky test cases you could add test cases with signatures of this shape:
Note that I didn't think through what types you should use in those rest parameters, just that they can be unions of tuples and that one of the signatures might have some of the elements there required and some might have them optional etc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you are loosening here how parameter types are meant to be compared I'd probably expect here:
Unless there is already a reason why the subtype relationship was used here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not really sure when each relation should be used. I used
compareTypesSubtypeOf
because that's what is used in a call tocompareSignaturesIdentical
withpartialMatch === true
in the functionfindMatchingSignatures
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
findMatchingSignatures
gets only called bygetUnionSignatures
so I agree that this probably makes sense