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
On JavaScript type checking (checkJs option), object initializer with function property ({ foo: function () {} }) emits ts2339 error unexpectedly, if that function gets and sets other properties of this.
🔎 Search Terms
checkJs function method definitions
🕗 Version & Regression Information
v3 (at least v3.9.7 on playground) does not emit an error. v4 emits an error,
// @ts-checkconstx={a: 0,b: 0,functionSyntax: function(){this.a=1;console.log(this.b);// Property 'b' does not exist on type 'functionSyntax'.(2339)},methodSyntax(){this.a=1;console.log(this.b);// no error},functionSyntaxWithoutAssignment: function(){console.log(this.b);// no error}};
🙁 Actual behavior
ts(2339) error Property '{name}' does not exist on type '{function name}'. is reported
🙂 Expected behavior
No error
The method declaration syntax ({ foo() {} }) does not emit an error. I think that function syntax should have the same behavior for this checking.
The text was updated successfully, but these errors were encountered:
I don't think it is related to variance..., but I found a change that seemed to be relevant: #39447 and understood its motivation.
With typescript v3, the code below generates an error. v4 is improved on this point.
// @ts-checkconstconstructors={SomeClass: function(){this.a=1;// Property 'a' does not exist on type '{ SomeClass: typeof SomeClass; }'.(2339)},};constx=newconstructors.SomeClass();console.log(x.a);
In this situation it is impossible to distinguish between constructors and non-constructor functions, so the current behavior is certainly convincing.
I have a lot of code that uses non-constructor function properties, so I would be happy if there was any workaround for this error.
xl1
changed the title
[JavaScript] Type checking for function property behaves diferrently from method declaration syntax
[JavaScript] Type checking for function property behaves differently from method declaration syntax
Mar 7, 2021
Bug Report
On JavaScript type checking (
checkJs
option), object initializer with function property ({ foo: function () {} }
) emits ts2339 error unexpectedly, if that function gets and sets other properties ofthis
.🔎 Search Terms
checkJs function method definitions
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play?declaration=false&useJavaScript=true#code/MYewdgzgLgBAHjAvDA3gKBpmBDAXDABgBoMsAjfY0zAMwFcxgoBLcAZQE8wps597GLcDAAUASlTUsmKAAtmEAHTYkMAIwBuKdNCQQAGwCmi-SADmIuQsVkxGmAHoHMAAoAnEAAdDbqBxgA5GQBMAAmIIYQMGAgsIZwCrDCft6BAkysYJzcvAGKIgBMAMxFAJxiUgC+JNIAtoZyIKHZPHDiktLSVkoqyJraWLoQBsamFt02dlU1WOlCWVytAOrMjXRQAIIQEMxmYPXc-AwZwu3onYPgw0Ym5pbySrZa0pVolRpAA
💻 Code
🙁 Actual behavior
ts(2339) error
Property '{name}' does not exist on type '{function name}'.
is reported🙂 Expected behavior
No error
The method declaration syntax (
{ foo() {} }
) does not emit an error. I think that function syntax should have the same behavior for this checking.The text was updated successfully, but these errors were encountered: