consistent-type-imports
Enforce consistent usage of type imports.
此规则报告的一些问题可通过 --fix
ESLint 命令行选项自动修复。
TypeScript 允许在导入上指定 type
关键字,以指示导出仅存在于类型系统中,而不存在于运行时。
这允许转译器在不知道依赖类型的情况下删除导入。
英:TypeScript allows specifying a type
keyword on imports to indicate that the export exists only in the type system, not at runtime.
This allows transpilers to drop imports without knowing the types of the dependencies.
详细信息请参见 博客 > 一致类型导出和导入:原因和方式。
module.exports = {
"rules": {
"@typescript-eslint/consistent-type-imports": "error"
}
};
选项
prefer
此选项定义仅类型导入的预期导入类型。 prefer
的有效值为:
英:This option defines the expected import kind for type-only imports. Valid values for prefer
are:
type-imports
将强制你始终使用import type Foo from '...'
,除非装饰器的元数据引用。 这是默认值。no-type-imports
将强制你始终使用import Foo from '...'
。
correct 代码与 {prefer: 'type-imports'}
以及 incorrect 代码与 {prefer: 'no-type-imports'}
的示例。
英:Examples of correct code with {prefer: 'type-imports'}
, and incorrect code with {prefer: 'no-type-imports'}
.
import type { Foo } from 'Foo';
import type Bar from 'Bar';
type T = Foo;
const x: Bar = 1;
Open in Playgroundincorrect 代码与 {prefer: 'type-imports'}
以及 correct 代码与 {prefer: 'no-type-imports'}
的示例。
英:Examples of incorrect code with {prefer: 'type-imports'}
, and correct code with {prefer: 'no-type-imports'}
.
import { Foo } from 'Foo';
import Bar from 'Bar';
type T = Foo;
const x: Bar = 1;
Open in PlaygroundfixStyle
此选项定义当检测到导入仅在类型位置中使用时要添加的预期类型修饰符。 fixStyle
的有效值为:
英:This option defines the expected type modifier to be added when an import is detected as used only in the type position. Valid values for fixStyle
are:
separate-type-imports
将在 import 关键字import type { A } from '...'
之后添加 type 关键字。 这是默认值。inline-type-imports
将内联类型关键字import { type A } from '...'
,并且仅在 TypeScript 4.5 及更高版本中可用。 参见 文档在这里。
- ❌ 不正确
- ✅ 与 separate-type-imports {#-with-separate-type-imports}
- ✅ 与 inline-type-imports {#-with-inline-type-imports}
import { Foo } from 'Foo';
import Bar from 'Bar';
type T = Foo;
const x: Bar = 1;
Open in Playgroundimport type { Foo } from 'Foo';
import type Bar from 'Bar';
type T = Foo;
const x: Bar = 1;
Open in Playgroundimport { type Foo } from 'Foo';
import type Bar from 'Bar';
type T = Foo;
const x: Bar = 1;
Open in PlaygrounddisallowTypeAnnotations
如果是 true
,则不允许类型注释 (import()
) 中的类型导入。
默认为 true
。
英:If true
, type imports in type annotations (import()
) are not allowed.
Default is true
.
incorrect 代码与 {disallowTypeAnnotations: true}
的示例:
英:Examples of incorrect code with {disallowTypeAnnotations: true}
:
type T = import('Foo').Foo;
const x: import('Bar') = 1;
Open in Playground与 emitDecoratorMetadata
一起使用
emitDecoratorMetadata
编译器选项更改 TypeScript 触发的代码。 简而言之,当在仅类型位置使用值导入时,它会导致 TypeScript 创建对值导入的引用。 如果你使用的是 emitDecoratorMetadata
,那么我们的工具将需要额外的信息才能使规则正常工作。
英:The emitDecoratorMetadata
compiler option changes the code the TypeScript emits. In short - it causes TypeScript to create references to value imports when they are used in a type-only location. If you are using emitDecoratorMetadata
then our tooling will require additional information in order for the rule to work correctly.
如果你使用的是 类型感知的 linting,那么你只需确保为 parserOptions.project
配置的 tsconfig.json
已打开 emitDecoratorMetadata
。 否则,你可以明确告诉我们的工具分析你的代码,就好像编译器选项已打开 通过将 parserOptions.emitDecoratorMetadata
设置为 true
一样。
英:If you are using type-aware linting, then you just need to ensure that the tsconfig.json
you've configured for parserOptions.project
has emitDecoratorMetadata
turned on. Otherwise you can explicitly tell our tooling to analyze your code as if the compiler option was turned on by setting parserOptions.emitDecoratorMetadata
to true
.
何时不使用它
如果你出于风格原因特别想要使用两种导入类型,或者不希望强制使用一种风格而不是另一种风格,则可以避免此规则。
英:If you specifically want to use both import kinds for stylistic reasons, or don't wish to enforce one style over the other, you can avoid this rule.
但是,请记住,不一致的风格可能会损害项目的可读性。 我们建议为此规则选择一个最适合你的项目的选项。
英:However, keep in mind that inconsistent style can harm readability in a project. We recommend picking a single option for this rule that works best for your project.
相关
no-import-type-side-effects
import/consistent-type-specifier-style
import/no-duplicates
与{"prefer-inline": true}
选项
该规则接受以下选项
type Options = [
{
disallowTypeAnnotations?: boolean;
fixStyle?: 'inline-type-imports' | 'separate-type-imports';
prefer?: 'no-type-imports' | 'type-imports';
},
];
const defaultOptions: Options = [
{
prefer: 'type-imports',
disallowTypeAnnotations: true,
fixStyle: 'separate-type-imports',
},
];