Profile オブジェクトの型があったとします。

type Profile = {
  name: string;
  age: number;
};

こちらの型を使いたいが、age は必要ない場合、パーシャル型を使用しました。

同様に、特定の型を他の型に作り替えたい場合、マップド型(Mapped Types)を使います。

書き方は、新しい型を作り、中に、『[P in keyof T]?: T[P]』と書きます。

T の中身には、元となる型が入ります。

今回は、Profile 型になります。

in keyof というのは、T の文字列リテラルのユニオン型を取得することができます。

type CustomProfile = { [P in keyof Profile]?: Profile[P]}

P は、Property の略で、プロパティが入ります。

つまり、Profile 型から、name と age を一つずつ取り出して型として使うか確認するというイメージです。

CustomProfile を確認すると、

image2

name と age がオプションになっているのがわかります。

実際に、確かめてみると

let tanaka: CustomProfile = { name: "田中" };

image3

tanaka に age がなくてもエラーが発生しませんでした。

ブログ一覧