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:
- ❌ 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 };
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 };
- ❌ 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.