import { Disposable } from './global';
declare global {
    interface ObjectConstructor {
        addMethods(target: object, methods: Function[]): void;
        extendPrototype(targetPrototype: object, extensionPrototype: object): void;
        merge<T1, T2>(target: T1, extension: T2): T1 & T2;
        merge<T1, T2, T3>(target: T1, extension1: T2, extension2: T3): T1 & T2 & T3;
        merge<T1, T2, T3, T4>(target: T1, extension1: T2, extension2: T3, extension3: T4): T1 & T2 & T3 & T4;
        merge<T>(target: Partial<T>, ...extensions: Partial<T>[]): T;
        clone<T>(target: T): T;
        hash(target: object): number;
        remove<T, P>(value: T, removeProps: (propsToRemove: T) => P): P;
        values<T = unknown>(target: object): T[];
        getValueOf<R>(delegate: () => R, defaultValue: R): R;
        getValueOf<T, R>(target: T, delegate: (target: T) => R, defaultValue: R): R;
        mixin(destinationClass: Function, sourceClass: Function): void;
        using<T extends Disposable, R>(object: T, use: (object: T) => R): R;
    }
}
