网站搜索

typescript - 枚举键中允许空格吗?


以下代码

enum Foo {
  Bar = 1,
  ["Bar Test"] = 3,
}

在 TS Playground 中可以正常编译,但将其插入到一个干净的 create-react-app 项目中会产生语法错误:

SyntaxError: <...>\ts-test\src\App.tsx: Unexpected token (7:2)

这是有效的 TS 吗?有某个 tsconfig 变量或版本允许它吗?

答案#1

枚举键确实允许空格;它们不需要是有效的标识符。

这似乎并没有在任何明显的地方被明确记录过(关于枚举声明的过时规范部分确实指出键可以是任何非计算属性名称,这可能是一个标识符,但也可能是一个字符串字面量)。

然而,有一个在 microsoft/TypeScript#40152 报告的错误,并在 microsoft/TypeScript#40679 修复,该错误涉及键作为标识符无效的枚举会导致编译器生成无效的 JavaScript(大概他们只是默认认为键会是有效的标识符)。解决方法是更改生成的 JavaScript 以处理无效标识符的枚举键。这意味着带有这种键的枚举是被有意支持的。否则,修复方法将是让 TypeScript 编译器拒绝这种枚举键。

所以可以说这些是被支持的。