Typescript编译器对可选类属性的处理似乎从es2021
更改为es2022
。
class A {
a?: string
b?: string
constructor() {
this.b = 'asd'
}
}
console.log(new A())
字符串
如果tsconfig target= es2021
,
A: {
"b": "asd"
}
型
如果tsconfig target= es2022
,
A: {
"a": undefined,
"b": "asd"
}
型
我找不到任何有关此更改的文档。这真的是预期行为吗?为什么?
通过更改TS Config->Target,可以轻松在ts playground中重现
1条答案
按热度按时间krcsximq1#
其区别是
useDefineForClassFields
:此标志用于迁移到即将到来的类字段标准版本的一部分。TypeScript在TC39中批准之前多年就引入了类字段。即将到来的规范的最新版本具有与TypeScript实现不同的运行时行为,但语法相同。
此标志切换到即将到来的ECMA运行时行为。
TS文档