ESLint 可以配置为标记字符串enum
的声明吗?例如:
enum Foo {
Bar = "bar",
Baz = "baz",
}
这与 no-mixed-enums
不同规则。我调查过no-restricted-syntax
,但据我所知,这并不涵盖 @typescript-eslint
规则。
一些背景:
- 枚举,特别是字符串枚举通常被认为是反模式,如 this Stack Overflow post 中简要阐述的那样。 .
- 目前,我希望允许普通(未分配的整数)枚举,因此我不想针对关键字本身进行 lint。
- 任何标记任何枚举值分配的 linter 配置也都可以工作。
最终我希望所有字符串 enum
声明都可以通过字符串联合 type
自动修复,即:
type Foo = "bar" | "baz";
是否有一个插件可以帮助解决这些问题?
最佳答案
如suggested作者:@anothermh,使用 @typescript-eslint/parser
深入研究 enum
的 AST,揭示了选择器中要使用的节点。链接至gist .
以下规则按预期工作:
{
"rules": {
"no-restricted-syntax": [
"error",
{
"selector": "TSEnumDeclaration > TSEnumMember > Literal",
"message": "Use a string union type instead."
}
]
}
}
当 linting 时,它只会标记带有已定义消息的声明的文字。
例如:
enum test1 {
member11,
member12 = "test12",
}
✗
enum test2 {
member21 = "test21",
member22 = "test22",
}
✗
enum test3 {
member31 = 31,
member32,
}
✗
enum test4 {
member41,
member42,
}
✓
这对于我目前的目的来说已经足够了。那么有办法automate the fixing通过替换整个表达式(再次)来消除这些错误。
关于typescript - 是否可以通过 ESLint 禁止字符串枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76007279/