consistent-type-imports
Enforce consistent usage of type imports.
TypeScript 3.8 added support for type-only imports. Type-only imports allow you to specify that an import can only be used in a type location, allowing certain optimizations within compilers.
Attributes
- Included in configs
- ✅ Recommended
- 🔒 Strict
- Fixable
- 🔧 Automated Fixer
- 💡 Suggestion Fixer
- 💭 Requires type information
Rule Details
This rule aims to standardize the use of type imports style across the codebase.
Options
type Options = {
prefer: 'type-imports' | 'no-type-imports';
disallowTypeAnnotations: boolean;
};
const defaultOptions: Options = {
prefer: 'type-imports',
disallowTypeAnnotations: true,
};
prefer
This option defines the expected import kind for type-only imports. Valid values for prefer
are:
type-imports
will enforce that you always useimport type Foo from '...'
except referenced by metadata of decorators. It is default.no-type-imports
will enforce that you always useimport Foo from '...'
.
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;
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;
disallowTypeAnnotations
If true
, type imports in type annotations (import()
) is not allowed.
Default is true
.
Examples of incorrect code with {disallowTypeAnnotations: true}
.
type T = import('Foo').Foo;
const x: import('Bar') = 1;
When Not To Use It
- If you are not using TypeScript 3.8 (or greater), then you will not be able to use this rule, as type-only imports are not allowed.
- If you specifically want to use both import kinds for stylistic reasons, you can disable this rule.