TypeScript 速習チュートリアル

TypeScript のオブジェクト型

TypeScriptには、オブジェクト(Object)の型を指定するための特定の構文(Syntax)があります。

1. オブジェクト型の基本定義

オブジェクトの型を定義するには、波括弧 {} 内にプロパティ(Property)名とその型を記述します。

const car: { type: string, model: string, year: number } = {
  type: "トヨタ",
  model: "カローラ",
  year: 2009
};

このようなオブジェクト型は、別途記述して再利用することも可能です。

2. 型推論 (Type Inference)

TypeScriptは、代入された値に基づいてプロパティの型を推論(Infers)することができます。

const car = {
  type: "トヨタ",
};
car.type = "フォード"; // エラーなし
car.type = 2; // エラー: 型 'number' を型 'string' に割り当てることはできません。

3. オプショナルプロパティ (Optional Properties)

オプショナルプロパティは、オブジェクトの定義において必須ではない(定義されていなくてもよい)プロパティです。プロパティ名の後ろに ? を付けることで指定します。

3.1 オプショナルプロパティを使用しない場合(エラー発生)

const car: { type: string, mileage: number } = { 
  // エラー: プロパティ 'mileage' は型 '{ type: string; }' にありませんが、型 '{ type: string; mileage: number; }' では必須です。
  type: "トヨタ",
};
car.mileage = 2000;

3.2 オプショナルプロパティを使用する場合

const car: { type: string, mileage?: number } = { // エラーなし
  type: "トヨタ"
};
car.mileage = 2000;

4. インデックスシグネチャ (Index Signatures)

インデックスシグネチャ(Index Signatures)は、プロパティのリストが事前定義されていないオブジェクトに使用できます。これにより、特定の型に従う任意のプロパティを追加できるようになります。

const nameAgeMap: { [index: string]: number } = {};
nameAgeMap.Jack = 25; // エラーなし
nameAgeMap.Mark = "Fifty"; // エラー: 型 'string' を型 'number' に割り当てることはできません。