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游乐场 通过更改 TS Config->Target
区别是
useDefineForClassFields
:
此标志用作迁移到即将推出的标准的一部分 类字段的版本。 TypeScript 引入类字段很多年了 在 TC39 批准之前。最新版本即将推出 规范与 TypeScript 具有不同的运行时行为 实现但语法相同。
此标志切换到即将到来的 ECMA 运行时行为。