如何使用 ESLint 检测 JS 或 TS 中本地 类 与全局名称的名称冲突?
How can I detect name collision of local classes with global ones in JS or TS using ESLint?
在 JavaScript 中,您可以定义一个 class,其名称类似于 Node
或 Attr
。我认为这可能会引起混淆,因为还有一个同名的全局构造函数。我相信 linting 是 ESLint 的工作,但我不知道如何配置它来检测它。 no-shadow
和 no-redeclare
似乎都不适用于这种重新声明或隐藏。 typescript-eslint
也检测不到
有没有办法防止全局 classes 的阴影?
编辑:no-shadow
和 { builtinGlobals: true }
并没有什么用。它仅适用于 Object
或 undefined
.
这样的名称
正如我在评论中提到的,这可以通过使用 no-shadow
规则来实现。默认情况下,该规则不检查内置类型(例如 window
、Node
或 Attr
),但可以通过设置选项 builtinGlobals
为真,像这样:
no-shadow: ["error", { "builtinGlobals": true }]
这现在告诉 ESLint 检查是否有任何变量隐藏了全局范围内可用的任何名称 - 但您必须配置哪些变量实际可用,因为 ESLint 本身并不知道。您可以通过 env
配置设置正确的环境来做到这一点:
"env": {
"browser": true
}
我配置了一个 small example in the ESLint Playground Demo 来展示这个。
在 JavaScript 中,您可以定义一个 class,其名称类似于 Node
或 Attr
。我认为这可能会引起混淆,因为还有一个同名的全局构造函数。我相信 linting 是 ESLint 的工作,但我不知道如何配置它来检测它。 no-shadow
和 no-redeclare
似乎都不适用于这种重新声明或隐藏。 typescript-eslint
也检测不到
有没有办法防止全局 classes 的阴影?
编辑:no-shadow
和 { builtinGlobals: true }
并没有什么用。它仅适用于 Object
或 undefined
.
正如我在评论中提到的,这可以通过使用 no-shadow
规则来实现。默认情况下,该规则不检查内置类型(例如 window
、Node
或 Attr
),但可以通过设置选项 builtinGlobals
为真,像这样:
no-shadow: ["error", { "builtinGlobals": true }]
这现在告诉 ESLint 检查是否有任何变量隐藏了全局范围内可用的任何名称 - 但您必须配置哪些变量实际可用,因为 ESLint 本身并不知道。您可以通过 env
配置设置正确的环境来做到这一点:
"env": {
"browser": true
}
我配置了一个 small example in the ESLint Playground Demo 来展示这个。