型の共通部分の抽出方法
以下のようなUser
とAdmin
の型の共通部分を取得する場合を考えます。
User
はemailでログインするがAdmin
はloginIdでログインするような仕様を想定しています。
type User = {
id: number;
name: string;
email: string;
};
type Admin = {
id: number;
name: string;
loginId: string;
};
以下のような記述で共通部分だけ抽出した型を作ることができます。
type Common = Pick<User, keyof User & keyof Admin>;
上記の型は以下と同じ型になります。
type Common = {
id: number;
name: string;
};
説明
ここから先は気になる方だけ。
ワンライナーで書いていた型を一つずつ紐解くと以下のようになります。
Pick
や&
(インターセクション型)の意味や使い方についてはサバイバルTypeScriptが参考になるかと思います。
type User = {
id: number;
name: string;
email: string;
};
type Admin = {
id: number;
name: string;
loginId: string;
};
type KeyOfUser = keyof User;
// => "id" | "name" | "email";
type KeyOfAdmin = keyof Admin;
// => "id" | "name" | "loginId";
type CommonKey = KeyOfUser & KeyOfAdmin;
// => "id" | "name";
type Common = Pick<User, CommonKey>;
// => { id: number; name: string; }