import { produce, Draft } from 'immer'; export function createState( fn: (draft: Draft, ...args: any[]) => void ): (state: T, ...args: any[]) => T { return (state: T, ...args: any[]): T => { return produce(state, (draft) => { fn(draft, ...args); }); }; }