【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
で包む