TypeScriptのRecord型は、あるオブジェクトのキーと値の型のセットがすべて同じ場合に、その型をまとめて指定する際に使う。

使いどころ

例えば、都道府県の名前を地域ごとに分類してまとめるオブジェクトを考える。

ts
type TodofukenName = "北海道" | "青森県" | "..." | "沖縄県";
const todofukens = {
  hokkaido: [] as TodofukenName[],
  tohoku: [] as TodofukenName[],
  kanto: [] as TodofukenName[],
  chubu: [] as TodofukenName[],
  kinki: [] as TodofukenName[],
  chugoku: [] as TodofukenName[],
  shikoku: [] as TodofukenName[],
  kyusyu: [] as TodofukenName[],
};

as TodofukenName[]が多くて見づらい。このようにすべてのキーとプロパティの型の組み合わせが同じ場合に、Record型は活躍する。

使い方

Record型の使い方は至って簡単である。Record<Keyの型,プロパティの型>という形でオブジェクトに指定すればよい。

ts
type RegionName = "hokkaido" | "tohoku" | "..." | "kyusyuu";
type TodofukenName = "北海道" | "青森県" | "..." | "沖縄県";
const todofukens: Record<RegionName, TodofukenName[]> = {
  hokkaido: [],
  tohoku: [],
  kanto: [],
  chubu: [],
  kinki: [],
  chugoku: [],
  shikoku: [],
  kyusyu: [],
};

せっかくなのでキーの型も定義したが、<string, TodofukenName[]>としても良い。

参考資料