-
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
Type narrowed too much #57880
Comments
Another duplicate of #9998. |
Is there anything to prevent to narrow such types? (a configuration option or a directive to put somewhere) |
No. It's all written in that issue. You can use a type assertion to prevent the initial narrowing: |
Note: Typescript is aware that the value of
|
@craigphicks Yes, IIFEs are special-cased: since the compiler can readily see from the syntax that the function will always be called immediately (and exactly once), it's treated the same as if the code was written inline. |
This issue has been marked as "Duplicate" and has seen no recent activity. It has been automatically closed for house-keeping purposes. |
π Search Terms
type narrowing local variable
π Version & Regression Information
I don't see anything related in the FAQ. But I acknowledge that this seem too common to be unknown. Every version seem affected however.
β― Playground Link
https://www.typescriptlang.org/play?ts=5.4.2#code/MYewdgzgLgBMCGAbRMC8MAUAzAXJglGgHwwBuIAlgCaGolYb4DcAUC6JLFAKbRoHEYAbxYwxMRN1jw8AVzBVuWCmG5UYAHxhhZAWwBG3AE795i5aqqtxMAPS2YAFQCeAB17AjFV7AjduuhAwUCAwhnAguq6SPIjOMPLwAO7wRtzBABbwXBnppEiy3KLi9jAgWDAABvCVcPBgcFlgAObpKpnpWCDIIEkqzXXIAHTFYgjIGIyCQjDw-ACMTDAAvsyjdg4AggodaQA0MBS+UBTImSoA1pnZVTV1DeBx66WuIBAQFPpxYemVZkoqNSVEY2CgVDBzACEqHQ-wsakIIhsNlKUAyFCCiEBMFasDSACtuMAeFR1jZ4EMQgBlKBeFqMaziZYsZasIA
π» Code
π Actual behavior
It seems that Typescript is not considering a function call to affect local variable. It proceed to narrow the type from this limitation, and thus reject valid code.
Not assigning
undefined
toa
causes the error to disappear BUT this is still a problem, because I might want a default value here (could be a number initially, that later get changed to undefined for example).For example, and this is worse:
This will compile fine, but it will fail at runtime!
π Expected behavior
The type should not be narrowed in this case.
Typescript should detect that a closure is referencing a local variable, and thus, should avoid narrowing its type.
Additional information about the issue
No response
The text was updated successfully, but these errors were encountered: