interface インターフェース(継承と宣言マージを含む)

最終更新:2026-10-22

interface インターフェース(継承と宣言マージを含む)

interface は 1 つの名前でオブジェクトの構造を記述します。どのプロパティやメソッドがあり、それぞれの型は何かを規定します。コンパイル時にのみ存在し(トランスパイル後は完全に消えます)、extends による継承と同名の宣言マージをサポートします。type エイリアスと並ぶ 2 大の型定義方式の 1 つです。

グループ型の組み合わせ
種類構文
strict モード不要

ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。

📝 構文

interface Animal {
  name: string;
  speak(): void;
}

// インターフェースの継承
interface Pet extends Animal {
  owner: string;
}

// 宣言マージ:同名の interface はメンバーを自動的にマージする
interface Window { title: string }
interface Window { version: number }

⚙️ パラメータ

extends1 つ以上のインターフェースを継承し、そのすべてのメンバーを獲得します
?:オプショナルプロパティのマーク。このプロパティが存在しなくてもよいことを許します
readonly読み取り専用の修飾子。代入後は変更できません

戻り値:戻り値はありません。interface は純粋な型レベルの概念であり、実行時コードを一切生成しません。

▶ サンプル

下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:

出力:

Tom Jerry
Meow

(トランスパイル後の実行出力。型チェックは tsc が行います。name を数値に変えると error TS2322 が得られます)

💡 ポイント

ℹ️ 説明 interface はトランスパイル後に完全に消え、実行時のオーバーヘッドはゼロです。コンパイラに見せる「構造の説明書」にすぎません。
💡 ヒント 同名の interface は自動的にマージされます(宣言マージ)。これはサードパーティライブラリの型を拡張する(例えば window にカスタムフィールドを追加する)標準的な手法です。
⚠️ 注意 interface と type エイリアスはほとんどの場面で交換可能です。ユニオン/マップ/条件型などの型演算が必要な場合は type しか使えず、宣言マージが必要な場合は interface しか使えません(チュートリアルの第 9/11 課に完全な比較表があります)。
ケースは今後追加予定です。

📚 関連チュートリアル

❓ よくある質問

Q interface と type の違いは何ですか?
A 両方ともオブジェクトの構造を定義し、日常的には交換可能です。interface は extends と宣言マージをサポートします。type はユニオン、タプル、マップ型、条件型など任意の型演算を表現できます。チームの約束でどちらか 1 つに決めれば十分で、混用は控えめにしてください。
Q interface は関数、配列、クラスを記述できますか?
A できます。呼び出しシグネチャ((x: number): string)は関数を、インデックスシグネチャ([i: number]: T)は配列を、new シグネチャはコンストラクタを記述し、クラスは implements でインターフェースを実装します。
Q 宣言マージとは何ですか?いつ役立ちますか?
A 同名の 2 つの interface のメンバーは自動的に 1 つにマージされます。典型的な用途は、サードパーティライブラリの window や Request などの型にカスタムフィールドを補い、ライブラリのソースコードを変更せずに済ませることです。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%