TypeScriptでオブジェクト配列のプロパティのタプル型を生成する

たとえば以下のようなコードがあるとします。

type Human = { name: string };
const humans: Human[] = [
  {
    name: "yamada",
  },
  {
    name: "satou",
  },
]

// できればhumansからHumanNamesをつくりたい・・・🤔
type HumanNames = "yamada" | "satou"

このとき、コメントにもあるようにhumans変数から、HumanNamesをつくりたいとします。

 

こういうときは、以下のように書けます。

type Human = { name: string };
const humans = [
  {
    name: "yamada",
  },
  {
    name: "satou",
  },
] as const satisfies readonly Human[]

const humanNames = humans.map(({ name }) => name);
type HumanName = (typeof humanNames)[number];

TypeScript4.9から使える、satisfiesオペレーターを使うのがポイントです。

最近になって Next.js や Storybook でもsatisfiesが使えるようになったので、satisfiesはガンガン使っていきましょうーー。

 

おわり

コメント

タイトルとURLをコピーしました