---
title: "@typescript-eslint/no-empty-interface"
description: "Disallow interfaces that declare no members"
# Generated by src/codegen/lint-rule-docs.ts. Do not edit below this line.
plugin: "typescript"
aliases: ["typescript-eslint/no-empty-interface","typescript/no-empty-interface"]
kind: "suggestion"
category: "style"
default: "off"
fixable: "yes"
typeAware: false
deprecated: true
---

An interface with no members checks almost nothing. `interface Options {}` accepts every value except `null` and `undefined`, the same as `{}`. An empty interface that extends one other type is only a second name for that type.

An empty interface that extends two or more types isn't reported, because it combines them.

`--fix` rewrites an empty interface that extends one type to a type alias.

This rule is deprecated. Use `@typescript-eslint/no-empty-object-type` instead. It reports the same interfaces, and the `{}` type too.

## Examples

Reported:

{/* bad {"count": 2} */}
```ts
interface Options {}

interface User {
  name: string;
}

interface Admin extends User {}
```

Not reported:

{/* good */}
```ts
interface User {
  name: string;
}

interface Timestamps {
  createdAt: Date;
}

type Admin = User;

interface StoredUser extends User, Timestamps {}
```

## Options

| Option | Default | What it does |
| --- | --- | --- |
| `allowSingleExtends` | `false` | Allow an empty interface that extends one type. |

{/* good {"options": [{"allowSingleExtends": true}]} */}
```ts
interface User {
  name: string;
}

interface Admin extends User {}
```
