Oteto Blogのロゴ

【TypeScript】2つのオブジェクトのプロパティをマージした型を定義する

やりたいこと

type TypeA = {
  a: string;
};

type TypeB = {
  b: string;
};

// { a: string; b: string; } を定義したい

上記のように、2つのオブジェクト(TypeATypeB)のプロパティをマージした型を定義したい。

type TypeA = {
  a: string;
};

type TypeB = {
  b: string;
};

type TypeAB = typeA & typeB; // { a: string; } & { b: string; }

ちなみに上記のようにIntersection(交差)型を使用することで実現できないことはないがこれは厳密にはマージされた型ではないので、純粋にマージした型を定義したい。

解決法

type TypeA = {
  a: string;
};

type TypeB = {
  b: string;
};

type Merge<T> = {
  [K in keyof T]: T[K];
};

type TypeAB = Merge<typeA & typeB>; // { a: string; b: string; }
  1. Mergetypeを独自に定義
    • keyofinを使い、交差型のkeyとvalueを抽出する
  2. 交差型をMergeで包む