export type ActionGenerator = { type: TType; } & (TPayloadGen extends Function ? (...args: Parameters) => { type: TType; payload: ReturnType; } : (...args: any[]) => { type: TType; payload?: unknown }); interface Action { (actionType: T): ActionGenerator; ( actionType: T, payloadGen: F ): ActionGenerator; } /** * Creates an action generator. */ export const action: Action; /** * Utility type for payload generators that are passthroughs. */ export type Payload = (arg: T) => T;