如何使用 ESLint 检测 JS 或 TS 中本地 类 与全局名称的名称冲突?

How can I detect name collision of local classes with global ones in JS or TS using ESLint?

在 JavaScript 中,您可以定义一个 class,其名称类似于 NodeAttr。我认为这可能会引起混淆,因为还有一个同名的全局构造函数。我相信 linting 是 ESLint 的工作,但我不知道如何配置它来检测它。 no-shadowno-redeclare 似乎都不适用于这种重新声明或隐藏。 typescript-eslint也检测不到

有没有办法防止全局 classes 的阴影?

编辑:no-shadow{ builtinGlobals: true } 并没有什么用。它仅适用于 Objectundefined.

这样的名称

正如我在评论中提到的,这可以通过使用 no-shadow 规则来实现。默认情况下,该规则不检查内置类型(例如 windowNodeAttr),但可以通过设置选项 builtinGlobals 为真,像这样:

no-shadow: ["error", { "builtinGlobals": true }]

这现在告诉 ESLint 检查是否有任何变量隐藏了全局范围内可用的任何名称 - 但您必须配置哪些变量实际可用,因为 ESLint 本身并不知道。您可以通过 env 配置设置正确的环境来做到这一点:

"env": { 
    "browser": true
}

我配置了一个 small example in the ESLint Playground Demo 来展示这个。