跳转到内容

useExportType

Diagnostic Category: lint/style/useExportType

Since: v1.5.0

Sources:

Promotes the use of export type for types.

TypeScript allows adding the type keyword on an export to indicate that the export doesn’t exist at runtime. This allows compilers to safely drop exports of types without looking for their definition.

The rule ensures that types are exported using a type-only export. It also groups inline type exports into a grouped export type.

interface I {}
export { I };
code-block.ts:2:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

All exports are only types.

1 │ interface I {}
> 2 │ export { I };
^^^^^^
3 │

Using export type allows compilers to safely drop exports of types without looking for their definition.

Safe fix: Use export type.

2 │ export·type·{·I·};
+++++
type T = number;
export { T };
code-block.ts:2:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

All exports are only types.

1 │ type T = number;
> 2 │ export { T };
^^^^^^
3 │

Using export type allows compilers to safely drop exports of types without looking for their definition.

Safe fix: Use export type.

2 │ export·type·{·T·};
+++++
import type { T } from "./mod.js";
export { T };
code-block.ts:2:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

All exports are only types.

1 │ import type { T } from “./mod.js”;
> 2 │ export { T };
^^^^^^
3 │

Using export type allows compilers to safely drop exports of types without looking for their definition.

Safe fix: Use export type.

2 │ export·type·{·T·};
+++++
export { type X, type Y };
code-block.ts:1:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

All exports are only types.

> 1 │ export { type X, type Y };
^^^^^^^^^^^^^^^^^^^
2 │

Using export type allows compilers to safely drop exports of types without looking for their definition.

Safe fix: Use export type.

1 - export·{·type·X,·type·Y·};
1+ export·type·{·X,·Y·};
2 2

class C {}
function f() {}
export { C, f };

This rules checks only the identifiers that are defined in a file. It doesn’t warn against a type exported as a value in a re-export clause such as:

export { TypeA } from "./mod.ts"