Dev Study
← 解説「交差型 & — 型を合成する」に戻る

サンプルコードで身につける: 交差型 & — 型を合成する

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

12つの型を&で合成する

交差型の最も基本の形です。Priced と Stocked を & でつなぐと、両方のプロパティをすべて持つ型ができます。合成後の型の値は、どちらか一方のプロパティだけでは不足でエラーになる、という「すべて必須」の性質もここで確認できます。

TypeScript

23つ以上の型を重ねて合成する

& は2つまでではなく、いくつでも連ねられます。id を持つ・作成日時を持つ、といった小さな型を部品として定義しておき、必要な組み合わせで合成するのがこの書き方の本領です。部品は他のデータ型(コメントやユーザー)の合成にもそのまま使い回せます。

TypeScript

3その場の型の式で&を使う

& は型エイリアスの定義だけでなく、関数の引数の型としてその場で書けます。「Order に メモ欄を足しただけの型」のために新しい名前を作らなくてよいのが、interface の extends にはない手軽さです。足したプロパティを ? にすれば任意項目にもできます。

TypeScript

4interface同士も&で合成できる

& がつなげるのは type エイリアスだけではなく、interface で定義した型も混ぜて合成できます。新しい interface を extends で宣言しなくても、既存の interface をその場で束ねた type を作れるので、既存コードの型を組み合わせるときに便利です。

TypeScript

5権限を段階的に合成する

実務の権限設計では「編集者は閲覧者のできることすべて + 編集」のような積み重ねが現れます。& で段階的に合成しておくと、Admin の値は Viewer のプロパティもすべて持つため、閲覧者向けの関数にそのまま渡せます。「合成した型は部品の型としても使える」ことを示す例です。

TypeScript