consistent-type-definitions
Enforce type definitions to consistently use either
interfaceortype.
🎨
Extending "plugin:@typescript-eslint/stylistic" in an ESLint configuration enables this rule.
🔧
Some problems reported by this rule are automatically fixable by the --fix ESLint command line option.
TypeScript provides two common ways to define an object type: interface and type.
// type alias
type T1 = {
a: string;
b: number;
};
// interface keyword
interface T2 {
a: string;
b: number;
}
The two are generally very similar, and can often be used interchangeably. Using the same type declaration style consistently helps with code readability.
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/consistent-type-definitions": "error"
}
};
Options
This rule accepts the following options
type Options = ['interface' | 'type'];
const defaultOptions: Options = ['interface'];
"interface"(default): enforce usinginterfaces for object type definitions."type": enforce usingtypes for object type definitions.
interface
- ❌ Incorrect
- ✅ Correct
type T = { x: number };
Open in Playgroundtype T = string;
type Foo = string | {};
interface T {
x: number;
}
Open in Playgroundtype
- ❌ Incorrect
- ✅ Correct
interface T {
x: number;
}
Open in Playgroundtype T = { x: number };
Open in PlaygroundWhen Not To Use It
If you specifically want to use an interface or type literal for stylistic reasons, you can disable this rule.