You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Error TS2729 should occur inside arrow functionΒ #61212
classFoo{publicfieldA=[].map(()=>{// access service inside arrow function shouldn't be work with useDefineForClassFields = truethis.service.do()// ^^^^^^^ expected error ts(2729)})publicfieldB=this.service.do()// ^^^^^^^ Property 'service' is used before its initialization. (ts(2729))publicconstructor(privateservice: {do: ()=>string}){}}
Just for sake of completeness:
JavaScript output with useDefineForClassFields = true
Error Property 'service' is used before its initialization.(2729) only occurs for fieldB initialization.
π Expected behavior
Error Property 'service' is used before its initialization.(2729) should also occur for fieldA initialization inside the arrow function.
Additional information about the issue
With useDefineForClassFields = true (which is the default) the generated JavaScript code in my example won't work, because service is accessed even though it is still undefined.
If I set the setting to false, as is done automatically for earlier targets, everything works. However, I would like to avoid using the old format for classes.
This is working as intended. The compiler doesn't know when your arrow function is invoked, and it's a reasonable assumption it will be invoked after your variable is set.
This would be improved with #58729, allowing the compiler to know that the arrow function passed to Array.map() will be invoked immediately.
Activity
MartinJohns commentedon Feb 18, 2025
This is working as intended. The compiler doesn't know when your arrow function is invoked, and it's a reasonable assumption it will be invoked after your variable is set.
This would be improved with #58729, allowing the compiler to know that the arrow function passed to
Array.map()will be invoked immediately.steffen-4s1 commentedon Feb 19, 2025
Thank you for your feedback and clarification.