=> { return (input: unknown): { [P in keyof T]: ReturnType<T[P]> } => { if (input === null || typeof input !== 'object') throw new Error() const out: { [P in keyof T]: ReturnType<T[P]> } = {} as any for (const k in inner) { out[k] = inner[k]((input as any)[k]) } return out } }