やりたいこと
type Person = {
name: string;
age: number;
job?: string;
}
type EnhancedPerson = Swap<Person, 'name', 'fullname'>
/*
EnhancedPerson = {
fullname: string;
age: number;
job?: string;
}
*/
やったこと
- (
recompose
とかからOmitをインポート。) - 引数はもとの型
T
と、T
の任意のキー名A
と、A
と入れ替えたい任意のキー名B
の3つ。 -
Omit<T, A>
でもとの型の任意のプロパティA
を省く。 -
{ [P in B]: T[A] }
でB
のキーに対してA
が持っていたバリューを割り当てた型を作ってそれをインターセクション
type Swap<T, A extends keyof T, B extends string> = Omit<T, A> & { [P in B]: T[A] }
結果
多分できた。他に誰かもっと効率よいやつを作っていそう。