为什么 es2022 的 typescript 可选类属性设置为 undefined

mrt*_*rsn 2 typescript tsc tsconfig es2022

Typescript 编译器对可选类属性的处理似乎已从 更改es2021es2022

class A {
    a?: string
    b?: string
    constructor() {
        this.b = 'asd'
    }
}
console.log(new A())
Run Code Online (Sandbox Code Playgroud)

与 tsconfig target=es2021结果

A: {
  "b": "asd"
} 
Run Code Online (Sandbox Code Playgroud)

与 tsconfig target=es2022结果

A: {
  "a": undefined,
  "b": "asd"
} 
Run Code Online (Sandbox Code Playgroud)

我找不到有关此更改的任何文档。这真的是有意的行为吗?为什么?

通过更改 TS Config->Target可以轻松在 ts Playground中重现

Mat*_*ler 6

区别在于useDefineForClassFields

\n
\n

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

\n

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

\n
\n

TS文档

\n