import/namespace 正确性
它的作用
当以完整命名空间方式导入时(例如 import * as foo from './foo'; foo.bar();),强制要求在引用之前名称已存在(即 ./foo 未导出 bar 时,会报告错误)。如果未找到任何导出的名称,则会在导入声明处报告错误。此外,对于计算属性引用(如 foo["bar"]())也会报告错误。对导入命名空间成员的赋值操作也会被报告。
为什么这是不好的?
引用不存在的名称可能导致运行时错误和代码中出现意外行为。这会使代码变得不可靠且更难维护,因为不清楚哪些名称是有效的。此规则有助于确保所有引用的名称都已定义,从而提高代码的清晰度和健壮性。
示例
给定
javascript
// ./foo.js
export const bar = "I'm bar";以下为该规则的错误示例:
javascript
// ./qux.js
import * as foo from "./foo";
foo.notExported(); // 错误:notExported 未被导出
// 对导入命名空间成员的赋值
foo.bar = "new value"; // 错误:bar 无法被重新赋值
// 对不存在导出的计算属性引用
const method = "notExported";
foo[method](); // 错误:notExported 不存在以下为该规则的正确示例:
javascript
// ./baz.js
import * as foo from "./foo";
console.log(foo.bar); // 有效:bar 已被导出
// 计算属性引用
const method = "bar";
foo[method](); // 有效:method 指向一个已导出的函数配置
此规则接受一个配置对象,包含以下属性:
allowComputed
type: boolean
默认值: false
是否允许对导入的命名空间进行计算属性引用。
如何使用
要通过配置文件或 CLI 启用此规则,可以使用:
json
{
"plugins": ["import"],
"rules": {
"import/namespace": "error"
}
}bash
oxlint --deny import/namespace --import-plugin