export declare type Constructor = { new (...args: any[]): T; prototype: T; }; export declare type StoreCtorBase = { get state(): any; [key: string]: any; } & T; export declare type StoreMethodKeys = ({ [P in keyof T]: T[P] extends Function ? P : never; })[keyof T]; export declare type StoreGetterKeys = ({ [P in keyof T]: T[P] extends Function ? never : P; })[keyof T]; export declare type StoreMethods = Pick>; export declare type StoreGetters = Pick>; export declare type StoreStateObject = Readonly<({ [P in keyof T]: T[P] extends Function ? never : (P extends 'state' ? T[P] : never); })[keyof T]>; export declare type StoreStateGetters = Readonly<{ [P in keyof StoreStateObject as `get${Capitalize}`]: StoreStateObject[P]; }>; export declare type StoreStateSetters = Readonly<{ [P in keyof StoreStateObject as `set${Capitalize}`]: (value: StoreStateObject[P]) => void; }>; export interface HistoryItem { state: any; modification: { before: any; after: any; }; time: number; } export declare type StoreClass = StoreGetters & StoreStateGetters & StoreStateSetters & TStore & { get state(): StoreStateGetters; __getHistory(): HistoryItem[]; __enableHistory(): void; __disableHistory(): void; __undoLastOperation(): void; }; export declare type StoreConstructor = Constructor & StoreCtorBase>; export declare function Store(Base: TBase, options?: { history?: boolean; }): StoreClass;