import { Command, CommandBusOptions, Options } from '..';
declare type UndoableResult<T = any, Q = void> = {
    value: T;
    name?: string;
    undo: () => Q;
};
export declare class UndoableCommandController {
    historySize: number;
    onExecute?: CommandBusOptions['onExecute'];
    history: UndoableResult[];
    constructor(historySize?: number, onExecute?: CommandBusOptions['onExecute']);
    undoLast(): UndoableResult;
    addEntry(result: UndoableResult): void;
}
interface UndoableOptions {
    controller?: boolean | UndoableCommandController;
}
declare module '..' {
    interface Options extends UndoableOptions {
    }
}
export declare class UndoableCommand<T = any, Q = void> extends Command<UndoableResult<T, Q>> {
}
export declare function undoableCommand(controller?: UndoableCommandController): CommandBusOptions<UndoableCommand, Options>['onExecute'];
export {};
