メインコンテンツへスキップ

consistent-type-definitions

型定義に interface または type のいずれかを一貫して使用することを強制します。

🎨

拡張 "plugin:@typescript-eslint/stylistic" ESLint設定 で有効にすると、このルールが有効になります。

🔧

このルールで報告された問題の一部は、 --fix ESLintコマンドラインオプション.

で自動的に修正できます。

// type alias
type T1 = {
a: string;
b: number;
};

// interface keyword
interface T2 {
a: string;
b: number;
}

TypeScriptには、オブジェクト型を定義する一般的な方法が2つあります。interfacetypeです。

この2つは一般的に非常に似ており、しばしば交換可能です。同じ型宣言スタイルを一貫して使用すると、コードの可読性が向上します。
module.exports = {
"rules": {
"@typescript-eslint/consistent-type-definitions": "error"
}
};

.eslintrc.cjs

プレイグラウンドでこのルールを試す↗

オプション

type Options = ['interface' | 'type'];

const defaultOptions: Options = ['interface'];
  • このルールは、次のオプションを受け入れます。
  • "interface" (デフォルト): オブジェクト型定義に interface を使用することを強制します。

"type": オブジェクト型定義に type を使用することを強制します。

type T = { x: number };
✅ 正しい

プレイグラウンドで開く

interface T {
x: number;
}
✅ 正しい

type

使用しない場合

スタイル上の理由で、インターフェースまたは型リテラルを具体的に使用したい場合は、このルールを回避できます。

ただし、スタイルが不整合だとプロジェクトの可読性を損なう可能性があることに注意してください。プロジェクトに最適なこのルールのオプションを1つ選択することをお勧めします。

また、Recordinterfaceの間には、静的に把握するのが難しい微妙な違いがあります。たとえば、プロジェクトが特定の型定義スタイルに依存する別のプロジェクトの依存関係である場合、このルールは逆効果になる可能性があります。このルールを完全に無効にする代わりに、特定の状況ではESLint disable commentsの使用を検討できます。