no-empty-interface
Disallow the declaration of empty interfaces.
Some problems reported by this rule are automatically fixable by the--fix ESLint command line option.
Some problems reported by this rule are manually fixable by editorsuggestions.
This rule has been deprecated in favour of the more comprehensive@typescript-eslint/no-empty-object-type rule.
An empty interface in TypeScript does very little: any non-nullable value is assignable to{}.Using an empty interface is often a sign of programmer error, such as misunderstanding the concept of{} or forgetting to fill in fields.
This rule aims to ensure that only meaningful interfaces are declared in the code.
- Flat Config
- Legacy Config
exportdefault tseslint.config({
rules:{
"@typescript-eslint/no-empty-interface":"error"
}
});
module.exports={
"rules":{
"@typescript-eslint/no-empty-interface":"error"
}
};
Try this rule in the playground ↗
Examples
- ❌ Incorrect
- ✅ Correct
// an empty interface
interfaceFoo{}
// an interface with only one supertype (Bar === Foo)
interfaceBarextendsFoo{}
// an interface with an empty list of supertypes
interfaceBaz{}
Open in Playground// an interface with any number of members
interfaceFoo{
name:string;
}
// same as above
interfaceBar{
age:number;
}
// an interface with more than one supertype
// in this case the interface can be used as a replacement of an intersection type.
interfaceBazextendsFoo, Bar{}
Open in PlaygroundOptions
This rule accepts the following options:
typeOptions=[
{
/** Whether to allow empty interfaces that extend a single other interface. */
allowSingleExtends?:boolean;
},
];
const defaultOptions: Options=[{ allowSingleExtends:false}];
allowSingleExtends
Whether to allow empty interfaces that extend a single other interface. Default:false.
allowSingleExtends: true will silence warnings about extending a single interface without adding additional members.
When Not To Use It
If you don't care about having empty/meaningless interfaces, then you will not need this rule.