-
Notifications
You must be signed in to change notification settings - Fork 12.6k
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
Intra expression inference doesn't work within reverse mapped types #53018
Comments
What is a βreverse mapped typeβ? I looked at the repro code but that just looks like a regular mapped type to me. |
A reverse mapped type is a type parameter that has to be inferred from usage when the usage is a mapped type - at least that's my mental model around this, this definition doesn't have to be 100% precise. So, here - the |
So I guess this is related to the umbrella issue here as that is still open. I think though that this one here is more of a bug/unhandled case within the original fix than a new feature request. This umbrella issue stays open because there are still other situations for which the original fix didn't do much but this issue here is very similar to the ones fixed by that PR. I think that those other situations could be put into a "different kind of an expression" category - whereas here we deal with the same types of expressions, they are just contained in a mapped type. Inferring reverse mapped types is implemented sufficiently differently that this still manifests for them. |
throwing in a bug recently discovered that appears to be related: playground cc @nickmccurdy |
If you mean that it also doesn't work when you use a regular function expression ( |
Just building on the possibly related react-query issue, here's a minimal example of that: For some reason showing up as unknown and not a typechecking error here, but the order does matter. |
Bug Report
π Search Terms
intra expression inference reverse mapped type
π Version & Regression Information
β― Playground Link
Playground link with relevant code (object variant)
Playground link with relevant code (tuple variant)
π» Code
π Actual behavior
This kind of inference that was improved in #48538 doesn't work within a reverse mapped type.
π Expected behavior
It should work in the same way as it does outside of the reverse mapped type. The code in the playground is almost literally taken from the 4.7 announcement blog post about this improvement (here). The only difference is that the
produce
/consume
"pair" is within a property of reverse mapped typePart of the problem is likely in that
inferReverseMappedType
callsinferTypes
with separateinferences
here:https://github.dev/microsoft/TypeScript/blob/e2283e99b47942b863d016c65a3e430dca1549b9/src/compiler/checker.ts#L23938-L23939
and that is not linked anyhow to the current inference
context
andinferFromIntraExpressionSites
tries to infer this kind of stuff fromcontext.intraExpressionInferenceSites
+context.inferences
and the latter won't be present for the computed reverse mapped type inference:https://github.dev/microsoft/TypeScript/blob/e2283e99b47942b863d016c65a3e430dca1549b9/src/compiler/checker.ts#L23756-L23763
However, I also noticed that
inferReverseMappedType
is not called at all in this case so those inferences for it aren't even gathered in the first place.The text was updated successfully, but these errors were encountered: