export declare type IOptions = object;
export interface IConfigurable<O extends IOptions = IOptions> {
    defaultOptions: O;
    getOptions: (options?: Partial<O>) => O;
    changeOptions: (options: Partial<O>) => O;
}
export declare abstract class Configurable<O extends IOptions = IOptions> implements IConfigurable<O> {
    static mergeOptions<O extends IOptions>(o1: O, o2: Partial<O> | O | undefined): O;
    static mergeOptions<O extends IOptions>(o1: O | Partial<O> | undefined, o2: O): O;
    static mergeOptions<O extends IOptions>(o1: Partial<O> | undefined, o2: Partial<O>): Partial<O>;
    static mergeOptions<O extends IOptions>(o1: Partial<O>, o2: Partial<O> | undefined): Partial<O>;
    static mergeOptions<O extends IOptions>(o1: Partial<O> | undefined, o2: Partial<O> | undefined): Partial<O> | undefined;
    abstract defaultOptions: O;
    getOptions(options?: Partial<O>): O;
    changeOptions(options: Partial<O>): O;
}
