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 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,
⏯ Playground Link
https://www.typescriptlang.org/play?declaration=false&useJavaScript=true#code/MYewdgzgLgBAHjAvDA3gKBpmBDAXDABgBoMsAjfY0zAMwFcxgoBLcAZQE8wps597GLcDAAUASlTUsmKAAtmEAHTYkMAIwBuKdNCQQAGwCmi-SADmIuQsVkxGmAHoHMAAoAnEAAdDbqBxgA5GQBMAAmIIYQMGAgsIZwCrDCft6BAkysYJzcvAGKIgBMAMxFAJxiUgC+JNIAtoZyIKHZPHDiktLSVkoqyJraWLoQBsamFt02dlU1WOlCWVytAOrMjXRQAIIQEMxmYPXc-AwZwu3onYPgw0Ym5pbySrZa0pVolRpAA
💻 Code
// @ts-check
const x = {
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.
Bug Report
On JavaScript type checking (
checkJsoption), 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.