export const pick = < T extends Record, R extends Record, S extends Partial & R, >( obj: T, attrs: Array, initial?: R, ): S => attrs.reduce( (res, attr) => ( (res[attr as keyof S] = (obj as unknown as S)[attr] as S[keyof S]), res ), initial as unknown as S, ); export const remap = >( obj: T, attrs: Partial>, initial?: Record, ) => Object.entries(attrs).reduce( (res, attr) => ((res[attr[1]] = obj[attr[0]]), res), initial, );