typescript - 是否可以通过 ESLint 禁止字符串枚举?

标签 typescript eslint typescript-eslint

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/

相关文章:

cordova - 如何在 Angular 2 移动应用程序中使用 Cordova 插件

typescript - 模块与命名空间:组织大型 typescript 项目的正确方法是什么?

reactjs - 由于 ESLint 错误,我的 create-react-app 无法编译

create-react-app - 解析错误 : '=' expected in `import type`

Typescript 类型阻止与其他原始类型进行比较

typescript 通用类型断言

node.js - 将 nguniversal/express-engine 添加到 Angular proj : "Cannot find BrowserModule import in/src/app/app.module.ts"

javascript - eslint 不识别模板文字

javascript - ESLint:如何在文件中设置 "new-cap"规则的 "capIsNewExceptions"选项?

typescript - @typescript-eslint/no-unused-vars 无法正常工作