modifyC
modify
関数を以下のように定義する
function modify<T extends object, K extends keyof T>(key: K, f: (old: T[K]) => T[K], struct: T): T
オブジェクトのキーとmapする関数を受け取って、キーに入っている値をMapする関数
こいつをCurry化した関数が
function modifyC<K extends string, T>(key: K, f: (old: T) => T): <U extends {[P in K]: T}>(x: U) => U {
return function <U extends {[P in K]: T}>(struct: U): U {
const newStruct: U = Object.assign({}, struct);
newStruct[key] = f(struct[key]);
return newStruct;
}
}
これ
めっちゃ多相
tsは化するときに型をいい感じに変えたほうが型注釈書かなくて便利 (雑な化 だと型注釈を書かないikenai)