Bug Report
🔎 Search Terms
useDefineForClassFields
🕗 Version & Regression Information
- This changed sometime between versions 3.7 and 4.2.4
- Upgrading the version of Typescript in Visual Studio 2019 introduced this issue
⏯ Playground Link
Same code compiles in VS Code and command lines, it breaks in Visual Studio 2019+Typescript 4.2.4 only
💻 Code
Use a @decorator on class properties or any code that is incompatible with useDefineForClassFields: true
Something like:
class MyClass {
@myDecorator()
myField: any;
}
Do not include useDefineForClassFields in your tsconfig.json at all.
Run Typescript compile.
When VS2019 with TS 4.2.4 compiles JS output includes class fields, something like:
var __decorate = // ...autogenerated implementation
let MyClass = class MyClass {
myField;
};
__decorate([
myDecorator()
], MyClass.prototype, "myField", null);
When tsc 4.3.5 compiles for the same tsconfig and source files it doesn't include class fields, something like:
var __decorate = // ...autogenerated implementation
let MyClass = class MyClass {
// No fields here
};
__decorate([
myDecorator()
], MyClass.prototype, "myField", null);
Adding useDefineForClassFields: false works around the issue and makes the JS output consistent.
Property decorators are ignored (as per #35081).
🙁 Actual behaviour
JS output includes class fields (as if useDefineForClassFields was set to true) in VS2019+TS 4.2.4
JS output does not include class fields (as if useDefineForClassFields was set to false) in tsc 3.7 or 4.3
🙂 Expected behaviour
JS output should not include class fields unless useDefineForClassFields is explicitly set to true.
Whatever default useDefineForClassFields setting is should be consistent between tsc and VS2019+TS
Bug Report
🔎 Search Terms
useDefineForClassFields🕗 Version & Regression Information
⏯ Playground Link
Same code compiles in VS Code and command lines, it breaks in Visual Studio 2019+Typescript 4.2.4 only
💻 Code
Use a
@decoratoron class properties or any code that is incompatible withuseDefineForClassFields: trueSomething like:
Do not include
useDefineForClassFieldsin yourtsconfig.jsonat all.Run Typescript compile.
When VS2019 with TS 4.2.4 compiles JS output includes class fields, something like:
When
tsc4.3.5 compiles for the sametsconfigand source files it doesn't include class fields, something like:Adding
useDefineForClassFields: falseworks around the issue and makes the JS output consistent.Property decorators are ignored (as per #35081).
🙁 Actual behaviour
JS output includes class fields (as if
useDefineForClassFieldswas set to true) in VS2019+TS 4.2.4JS output does not include class fields (as if
useDefineForClassFieldswas set to false) in tsc 3.7 or 4.3🙂 Expected behaviour
JS output should not include class fields unless
useDefineForClassFieldsis explicitly set to true.Whatever default
useDefineForClassFieldssetting is should be consistent between tsc and VS2019+TS