Skip to content

useExportType (since v1.5.0)

Diagnostic Category: lint/style/useExportType

Sources:

Promotes the use of export type for types.

TypeScript allows specifying a type marker on an export to indicate that the export doesn’t exist at runtime. This allows transpilers 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 };
style/useExportType.js:2:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   All exports are only types and should thus use export type.
  
    1 │ interface I {}
  > 2 │ export { I };
          ^^^^^^
    3 │ 
  
   Using export type allows transpilers to safely drop exports of types without looking for their definition.
  
   Safe fix: Use a grouped export type.
  
    2 │ export·type·{·I·};
         +++++      
type T = number;
export { T };
style/useExportType.js:2:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   All exports are only types and should thus use export type.
  
    1 │ type T = number;
  > 2 │ export { T };
          ^^^^^^
    3 │ 
  
   Using export type allows transpilers to safely drop exports of types without looking for their definition.
  
   Safe fix: Use a grouped export type.
  
    2 │ export·type·{·T·};
         +++++      
import type { T } from "./mod.js";
export { T };
style/useExportType.js:2:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   All exports are only types and should thus use export type.
  
    1 │ import type { T } from "./mod.js";
  > 2 │ export { T };
          ^^^^^^
    3 │ 
  
   Using export type allows transpilers to safely drop exports of types without looking for their definition.
  
   Safe fix: Use a grouped export type.
  
    2 │ export·type·{·T·};
         +++++      
export { type X, type Y };
style/useExportType.js:1:8 lint/style/useExportType  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   All exports are only types and should thus use export type.
  
  > 1 │ export { type X, type Y };
          ^^^^^^^^^^^^^^^^^^^
    2 │ 
  
   Using export type allows transpilers to safely drop exports of types without looking for their definition.
  
   Safe fix: Use a grouped 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"