メインコンテンツにスキップ
モジュール 2 · レッスン 1 / 2コース内の 3/14~12 min
モジュールのレッスン (1/2)

型エイリアスとインターフェイス

TypeScript では、インターフェイス (interface) または 型エイリアス (type) を使用するという 2 つの主な方法で複雑なオブジェクトの構造を定義できます。どちらもオブジェクトまたはデータ構造の「形状」を記述するのに役立ちますが、根本的な違いがいくつかあります。


インターフェース (interface)

インターフェイスは、オブジェクトの構造の規約を定義します。これは、オブジェクトの形状とパブリック API を拡張可能な方法で記述するための標準ツールです。

TS
interface Book {
  title: string;
  pages: number;
  author?: string; // Optional property (can be omitted)
}

const myBook: Book = {
  title: 'The Lord of the Rings',
  pages: 1200,
};

疑問符 (?) は、プロパティを オプション としてマークします。 myBook オブジェクトは、author プロパティを省略した場合でも有効です。


タイプエイリアス (type)

型エイリアスを使用すると、プリミティブ型、共用体、タプル、オブジェクト構造全体などの既存の型に新しい名前を関連付けることができます。

TS
type Point = {
  x: number;
  y: number;
};

const coordinates: Point = { x: 10, y: 20 };

主な違い: 拡張機能と宣言のマージ

interface と type は、ほとんどの一般的な使用例では交換可能ですが、次の 2 つの重大な違いがあります。

1. 拡張性(継承)

インターフェイスは extends キーワードを使用して拡張されます。

TS
interface User {
  username: string;
}

interface Admin extends User {
  privileges: string[];
}

型の別名は extends を使用して拡張できませんが、交差 演算子 (&) を使用して組み合わせることができます。

TS
type User = {
  username: string;
};

type Admin = User & {
  privileges: string[];
};

2. 宣言のマージ

同じスコープ内の同じ名前を持つ複数のインターフェイスは、コンパイラによって自動的にマージされます。

TS
interface User {
  name: string;
}
interface User {
  email: string;
}
// Now User has both 'name' and 'email'!

この動作は型エイリアスではサポートされていません。同じ type を 2 回宣言すると、コンパイル時エラーが発生します。


自分で試してみてください

演習 1: ユーザー インターフェイス

運動#ts.m2.l1.e1
試行回数: 0読み込み中…

ユーザー オブジェクトを記述する User という名前のインターフェイスを定義します。インターフェイスには、数値としての ID、文字列としてのユーザー名、およびオプションの文字列としての電子メールが含まれている必要があります。

エディターを読み込み中…
ヒントを表示

オプションとしてマークするには、構文 email?: string を使用します。

3 回の試行後に解決策が利用可能になります

演習 2: Point2D タイプのエイリアス

運動#ts.m2.l1.e2
試行回数: 0読み込み中…

座標 x と y (両方の数値) を持つ 2 次元の点を表す Point2D という名前の型エイリアスを作成します。

エディターを読み込み中…
ヒントを表示

Point2D = { x: 数値; という構文タイプを使用します。 y: 数値。 };

3 回の試行後に解決策が利用可能になります

演習 3: インターフェイスの拡張

運動#ts.m2.l1.e3
試行回数: 0読み込み中…

ID (数値) と価格 (数値) を使用して、Product という名前のインターフェイスを定義します。次に、Product を拡張し、discountCode (文字列) という名前のオプションのプロパティを追加する、DiscountedProduct という名前のインターフェイスを定義します。

エディターを読み込み中…
ヒントを表示

extends Product を使用してフィールドを継承し、discountCode?: 文字列を追加します。

3 回の試行後に解決策が利用可能になります

演習 4: サーバー構成

運動#ts.m2.l1.e4
試行回数: 0読み込み中…

サーバーの構成オブジェクトを表す ServerConfig という名前のタイプ エイリアスを定義します。これには、ホスト (文字列)、ポート (数値)、およびオプションのブール型フィールドとして useHttps が含まれている必要があります。

エディターを読み込み中…
ヒントを表示

ServerConfig = { host: string; という構文タイプを使用します。ポート: 番号; useHttps?: ブール値; }。

3 回の試行後に解決策が利用可能になります