Skip to content
← Back to rules

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

参考资料