Skip to content

Latest commit

 

History

History
70 lines (50 loc) · 2 KB

consistent-type-imports.md

File metadata and controls

70 lines (50 loc) · 2 KB
description
Enforce consistent usage of type imports.

🛑 This file is source code, not the primary documentation location! 🛑

See https://typescript-eslint.io/rules/consistent-type-imports for documentation.

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

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 '...' except referenced by metadata of decorators. 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'}.

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.