type EventsFromTransitions = { [Prop in keyof T]: keyof T[Prop]; }[keyof T]; export declare function fsm>>, TStates extends keyof TTransitions, TEvents extends EventsFromTransitions>(config: TTransitions): { transition(currentState: TStates, event: TEvents): TStates; }; export type Machine = ReturnType; export type States = T extends Machine ? Parameters[0] : T extends Machine['transition'] ? Parameters[0] : never; export type Events = T extends Machine ? Parameters[1] : T extends Machine['transition'] ? Parameters[1] : never; export {};