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
Improve reverse mapped types #31221
Improve reverse mapped types #31221
Conversation
// types because we may only have a partial result (i.e. we may have failed to make | ||
// reverse inferences for some properties). | ||
priority |= getObjectFlags(source) & ObjectFlags.NonInferrableType ? | ||
InferencePriority.PartialHomomorphicMappedType : InferencePriority.HomomorphicMappedType; |
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 experimented with a top-level priority instead of this inner one. There are some error messages I think it makes look nicer (erroring on "1
is not assignable to string
" rather than "(x: string) => string
is not assignable to (x: string) => number
" seems way nicer), but there's one test where we issue an error we didn't before (but that might just be because our other priorities are a little off and we're generating a type slightly too derived in the second pass). :(
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.
As I mentioned yesterday, I don't think that's the right approach anyway. The CheckMode.SkipContextSensitive
indicates that context sensitive function expressions should be skipped if any are encountered. But what matters is whether context sensitive functions were actually skipped, and that's tracked by the ObjectFlags.NonInferrableType
flag. An inference made in the first pass is just as good as an inference made in the second pass because we never infer from anything that contains non-inferrable types. Except in the case of reverse mapped types, and that's why we just need the lower priority for those.
Fixes #30505.