为什么 es2022 的 typescript 可选类属性设置为未定义

问题描述 投票:0回答:1

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

typescript tsconfig tsc es2022
1个回答
6
投票

区别是

useDefineForClassFields

此标志用作迁移到即将推出的标准的一部分 类字段的版本。 TypeScript 引入类字段很多年了 在 TC39 批准之前。最新版本即将推出 规范与 TypeScript 具有不同的运行时行为 实现但语法相同。

此标志切换到即将到来的 ECMA 运行时行为。

TS 文档

© www.soinside.com 2019 - 2024. All rights reserved.