-
Notifications
You must be signed in to change notification settings - Fork 12.5k
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
Incorrect inference when using the return
keyword in an identity function, or when using an optional argument
#49951
Comments
Possible related issue for the argument case: #25092, however it was fixed in 4.7 and my issue still reproduces there. |
This is pretty subtle but it's indeed a consequence of #47599. When the object literal is directly in the function body expression position we can do some safer inferences that can't occur in the |
This issue has been marked as a 'Duplicate' and has seen no recent activity. It has been automatically closed for house-keeping purposes. |
If someone ever encounters this issue, found a temp solution! By wrapping the returned value with an identity function, both the edge cases are working, see in this playground e.g. step(_something => (identityOfStep({
schema: {
attribute: 'anything',
},
toAnswers: keys => {
// RESULT: `keys` succeeds to be inferred
type Test = string extends typeof keys ? never : 'true'
const test: Test = 'true'
return { test }
},
}))) |
Note that |
I think that this |
Hey @Andarist! A year and a half later I've encountered Would you like me to open a separate issue? |
This likely falls into the #47599 bucket (just like Ryan mentioned above). So it might be hard to get this fixed (that umbrella ticket isn't trivial) but maybe some carveout can be figured out for your case here, I'm not sure. I might take a look at it sometime later - and a fresh issue would definitely help me to remember about this. |
Bug Report
I'm running into very weird behavior when using identity functions. I'm writing a wizard system with schema (attached is a playground link with a very simplified version), and using constrained identity function to get inference.
The problem occurs in an argument of one property which is a function, when either of these occur:
return
keyword (rather than a single-line return wrapped with parentheses).OR
Parameters<typeof myFunction>
it's inferred correctly both when declaring the argument and when I not.Both these issues are super weird to me, which means I'm either missing something very fundamental or I have found 2 rare bugs.
🔎 Search Terms
Inference, Return, Arguments, Parentheses, Identity Function.
🕗 Version & Regression Information
This reproduces in all available playground versions (tried down to 3.3.3), and also in 4.8.
⏯ Playground Link
Playground link with relevant code
💻 Code
Probably better to check the playground for code examples, but there:
TYPES DECLERATIONS:
EXAMPLES:
Notice the returned object of all functions is the same! The differences are in:
return
keyword or not (?!?!)step
function or not. Note that if I doParameters<typeof myStepValue>
even when the argument is missing, it's inferred correctly (!)🙁 Actual behavior
Nested value's function argument cannot be inferred correctly.
If I change the property (
toAnswers
) from a function to a simple property, there are no inference issues.🙂 Expected behavior
Nested value function argument should be inferred correctly regardless of the
return
keyword or declaring the arguments.The text was updated successfully, but these errors were encountered: