Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(eslint-plugin): add
consistent-type-imports
rule (#2367)
- Loading branch information
1 parent
89404f9
commit 73d605d
Showing
6 changed files
with
1,682 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
64 changes: 64 additions & 0 deletions
64
packages/eslint-plugin/docs/rules/consistent-type-imports.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# Enforces consistent usage of type imports (`consistent-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. | ||
|
||
## Rule Details | ||
|
||
This rule aims to standardize the use of type imports style across the codebase. | ||
|
||
## Options | ||
|
||
```ts | ||
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 use `import type Foo from '...'`. It is default. | ||
- `no-type-imports` will enforce that you always use `import Foo from '...'`. | ||
|
||
Examples of **correct** code with `{prefer: 'type-imports'}`, and **incorrect** code with `{prefer: 'no-type-imports'}`. | ||
|
||
```ts | ||
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'}`. | ||
|
||
```ts | ||
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}`. | ||
|
||
```ts | ||
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.