import { SpyAdapter } from './spy-adapters/spy-adapter';
export declare type RecursivePartial<T> = Partial<{
    [key in keyof T]: T[key] extends (...a: Array<infer U>) => any ? (...a: Array<U>) => RecursivePartial<ReturnType<T[key]>> | ReturnType<T[key]> : T[key] extends Array<any> ? Array<RecursivePartial<T[key][number]>> : RecursivePartial<T[key]> | T[key];
}>;
export interface ExtendedWith<T> {
    with(stubs: RecursivePartial<T>): T;
}
export declare class Mockery {
    static readonly noop: () => any;
    static all<T>(): T;
    static configure(spyAdapter: 'jasmine' | 'jest' | SpyAdapter): void;
    static extend<T>(object: T): ExtendedWith<T>;
    static from<T>(object: RecursivePartial<T>): T;
    static of<T extends Array<any>>(stubs?: Array<RecursivePartial<T[number]>>): T;
    static of<T extends ReadonlyArray<any>>(stubs?: ReadonlyArray<RecursivePartial<T[number]>>): T;
    static of<T extends object>(stubs?: RecursivePartial<T>): T;
    static staticMethod<T, K extends keyof T>(object: T, key: K, stub: T[K] & Function): void;
    private static spyAdapter;
    private static spyOnTheStubbedFunctions;
    private static withGenerator;
}
