Skip to main content

consistent-type-exports

Enforce consistent usage of type exports.

Type-only exports allow you to specify that 1 or more named exports are exported as type-only. This allows transpilers to drop exports without knowing the types of the dependencies.

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 exports style.

Given a class Button, and an interface ButtonProps, examples of code:

interface ButtonProps {
onClick: () => void;
}

class Button implements ButtonProps {
onClick() {
console.log('button!');
}
}

export { Button, ButtonProps };
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/consistent-type-exports": "warn"
}
};

Options

This rule accepts an options object with the following properties:

interface Options {
fixMixedExportsWithInlineTypeSpecifier?: boolean;
}

const defaultOptions: Options = [
{ fixMixedExportsWithInlineTypeSpecifier: false },
];

fixMixedExportsWithInlineTypeSpecifier

When this is set to true, the rule will autofix "mixed" export cases using TS 4.5's "inline type specifier". If you are using a TypeScript version less than 4.5, then you will not be able to use this option.

For example the following code:

const x = 1;
type T = number;

export { x, T };

With {fixMixedExportsWithInlineTypeSpecifier: true} will be fixed to:

const x = 1;
type T = number;

export { x, type T };

With {fixMixedExportsWithInlineTypeSpecifier: false} will be fixed to:

const x = 1;
type T = number;

export type { T };
export { x };
export { Button } from 'some-library';
export type { ButtonProps } from 'some-library';

When Not To Use It

  • If you specifically want to use both export kinds for stylistic reasons, you can disable this rule.
  • If you use --isolatedModules the compiler would error if a type is not re-exported using export type. If you also don't wish to enforce one style over the other, you can disable this rule.

Resources