読み取り専用の型を書き込み可能にするUtility Type
定義
code:memo.ts
export type Writable<T, K extends keyof T> = {
} & Omit<T, K>;
解説
keyof Tで、読み取り専用の型のプロパティーを列挙して(ユニオン型として抜き出して)
K extends keyof Tで、書き込み可能にするプロパティーを利用側で指定してもらい
[P in K]: T[P]として、読み取り専用の型を再利用してプロパティーを定義する(Mapped Types)のだが
-readonlyでreadonlyのモディファイアーを取り除いている(Mapping Modifiers)
最後に、書き込み可能と指定されていないプロパティーを& Omit<T, K>で抜き出して合成している