跳至主要内容

禁止导入类型产生副作用

当导入仅包含带有内联类型限定符的指定符时,强制使用顶层导入类型限定符。

🔧

此规则报告的一些问题可以通过 --fix ESLint 命令行选项 自动修复。

--verbatimModuleSyntax 编译器选项会导致 TypeScript 对导入声明进行简单且可预测的转译。也就是说,它会完全删除带有顶层 type 限定符的导入声明,以及删除任何带有内联 type 限定符的导入指定符。

后一种行为确实在某些情况下会导致一个潜在的意外效果,即 TS 可以在运行时留下一个“副作用”导入。

import { type A, type B } from 'mod';

// is transpiled to

import {} from 'mod';
// which is the same as
import 'mod';

对于需要导入副作用的罕见情况,这可能是可取的 - 但对于大多数情况,您不希望留下不必要的副作用导入。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-import-type-side-effects": "error"
}
};

在游乐场中尝试此规则 ↗

示例

此规则强制您在导入仅包含带有内联 type 限定符的指定符时,使用顶层 type 限定符。

import { type A } from 'mod';
import { type A as AA } from 'mod';
import { type A, type B } from 'mod';
import { type A as AA, type B as BB } from 'mod';
在游乐场中打开

选项

此规则不可配置。

何时不使用它

如果您没有使用 TypeScript 5.0 的 verbatimModuleSyntax 选项,并且您的项目使用管理导入副作用的捆绑器构建,那么此规则可能对您没有那么有用。

资源