禁止导入类型产生副作用
当导入仅包含带有内联类型限定符的指定符时,强制使用顶层导入类型限定符。
🔧
此规则报告的一些问题可以通过 --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';
在游乐场中打开import type { A } from 'mod';
import type { A as AA } from 'mod';
import type { A, B } from 'mod';
import type { A as AA, B as BB } from 'mod';
import T from 'mod';
import type T from 'mod';
import * as T from 'mod';
import type * as T from 'mod';
import { T } from 'mod';
import type { T } from 'mod';
import { T, U } from 'mod';
import type { T, U } from 'mod';
import { type T, U } from 'mod';
import { T, type U } from 'mod';
import type T, { U } from 'mod';
import T, { type U } from 'mod';
在游乐场中打开选项
此规则不可配置。
何时不使用它
如果您没有使用 TypeScript 5.0 的 verbatimModuleSyntax
选项,并且您的项目使用管理导入副作用的捆绑器构建,那么此规则可能对您没有那么有用。
相关
consistent-type-imports
import/consistent-type-specifier-style
import/no-duplicates
与{"prefer-inline": true}