export type AnyAction = (...args: any[]) => void; export type AnyActions = Record; export type Middleware = (prevState: State, nextState: State, actions: Actions) => Partial; export type SideEffect = (prevState: State, nextState: State) => void; export type EnhancedAction< State, Actions extends AnyActions, Action extends AnyAction = AnyActions[keyof AnyActions] > = (...args: Parameters) => (state: State, actions: Actions) => Partial | void; export type EnhancedActions = { [Name in keyof Actions]: EnhancedAction; }; export type ManagerConfig = { actions: EnhancedActions; debug?: boolean; middleware?: Middleware[]; state?: Partial; sideEffects?: SideEffect[]; }; export type ManagerFactory = ( config: ManagerConfig, ) => Manager; export type Manager = { readonly state: State; actions: Actions; };