consistent-type-exports
Enforce consistent usage of type exports.
Some problems reported by this rule are automatically fixable by the --fix
ESLint command line option.
This rule requires type information to run.
TypeScript allows specifying a type
keyword on exports to indicate that the export exists only in the type system, not at runtime.
This allows transpilers to drop exports without knowing the types of the dependencies.
See Blog > Consistent Type Exports and Imports: Why and How for more details.
module.exports = {
"rules": {
"@typescript-eslint/consistent-type-exports": "error"
}
};
Examples
- ❌ Incorrect
- ✅ Correct
interface ButtonProps {
onClick: () => void;
}
class Button implements ButtonProps {
onClick = () => console.log('button!');
}
export { Button, ButtonProps };
interface ButtonProps {
onClick: () => void;
}
class Button implements ButtonProps {
onClick = () => console.log('button!');
}
export { Button };
export type { ButtonProps };
This rule accepts an options object with the following properties:
interface Options {
fixMixedExportsWithInlineTypeSpecifier?: boolean;
}
const defaultOptions: Options = [
{ fixMixedExportsWithInlineTypeSpecifier: false },
];
Options
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 };
- ❌ Incorrect
- ✅ Correct
export { Button } from 'some-library';
export type { ButtonProps } from 'some-library';
export { Button, 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 usingexport type
. If you also don't wish to enforce one style over the other, you can disable this rule.