Skip to content
← Back to rules

eslint/no-duplicate-imports 风格

An auto-fix is available for this rule.

它做了什么

禁止重复的模块导入。

为什么这是不好的?

为每个模块使用单个导入语句会使代码更清晰,因为你可以通过一行就看到从该模块导入的所有内容。

示例

此规则的错误代码示例:

在以下示例中,第 1 行的模块导入在第 3 行再次出现。这些可以合并,使导入列表更加简洁。

js
import { merge } from "module";
import something from "another-module";
import { find } from "module";

此规则的正确代码示例:

js
import { merge, find } from "module";
import something from "another-module";

配置

此规则接受一个配置对象,包含以下属性:

allowSeparateTypeImports

type: boolean

默认值: false

当设置为 true 时,仅包含类型说明符(内联类型或类型导入)的导入被视为与包含值说明符的导入分开,因此可以从同一模块在不同的导入语句中导入。

allowSeparateTypeImports 设置为 true 时的正确代码示例:

js
import { foo } from "module";
import type { Bar } from "module";
js
import { type Foo } from "module";
import type { Bar } from "module";

includeExports

type: boolean

默认值: false

当设置为 true 时,此规则还会检查导出,以查看是否存在对同一模块的重新导出(如 export ... from 'module')以及对该模块的标准导入语句。这种情况会被视为违反规则,因为本质上是两条语句从同一模块导入。

includeExports 设置为 true 时的错误代码示例:

js
import { merge } from "module";

export { find } from "module"; // 重新导出,这既是导入也是导出。

includeExports 设置为 true 时的正确代码示例:

如果要从已导入的模块进行重新导出,请将导入添加到 import 语句中,并直接导出,而不是使用 export ... from

js
import { merge } from "lodash-es";
export { merge as lodashMerge };
js
import { merge, find } from "module";

// 无法与上面的导入合并
export * as something from "module";

// 无法以其他方式书写
export * from "module";

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

json
{
  "rules": {
    "no-duplicate-imports": "error"
  }
}
bash
oxlint --deny no-duplicate-imports

参考资料