如何防止 TypeScript 剥离未分配的静态类字段

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

如果我使用以下 JavaScript 代码:

class test {
    static 'a-a';
    static 'b-b';
    static 'c-c';
  }
console.log(Object.keys(test))
// output (chrome console): ['a-a', 'b-b', 'c-c']

我可以在运行时枚举静态字段。

然而,在 TypeScript 中,这不起作用(playground):

 class test {
    static 'a-a': unknown;
    static 'b-b': unknown;
    static 'c-c': unknown;
  }
console.log(Object.keys(test))

生成这个缺少静态字段的 JavaScript:

"use strict";
class test {
}
console.log(Object.keys(test));
// output (chrome console): []

我需要运行时枚举。为什么被删除了?

我可以做什么来改变这种状况?

我尝试了所有可以想象的编译器选项,但没有发现任何帮助。

typescript
1个回答
0
投票

如果您希望 TypeScript 发出 类字段,您需要

--target
支持它们的 JavaScript 版本。公共类字段在 ES2022 中引入

此外,您可能需要启用

--useDefineForClassFields
编译器选项,因为该选项可确保 TypeScript 类字段和 JavaScript 类字段具有相同的行为。根据文档,对于 ES2022 或更高版本的目标,此选项会自动启用。但为了安全起见,明确启用它并没有什么坏处。

这意味着您需要类似

tsc --target es2022 --useDefineForClassFields ⋯
或等效的 tsconfig.json 设置。

Playground 代码链接

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