【TypeScript】2つのオブジェクトのプロパティをマージした型を定義する
やりたいこと
type TypeA = { a: string;};
type TypeB = { b: string;};
// { a: string; b: string; } を定義したい
上記のように、2つのオブジェクト(TypeA
とTypeB
)のプロパティをマージした型を定義したい。
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; }
Merge
typeを独自に定義keyof
とin
を使い、交差型のkeyとvalueを抽出する
- 交差型を
Merge
で包む
参考