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