interface ICommonConfig<T> {
    onFailure?(error: Error): T;
    onSuccess?(result: T, attempts: number): T | void;
}
interface IConfigMaxAttempts {
    maxAttempts: number;
    onAttempt?(attempt: number, error: Error): boolean | void;
}
interface IConfigOnAttempt {
    onAttempt(attempt: number, error: Error): boolean | void;
}
declare type IConfig<T> = ICommonConfig<T> & (IConfigMaxAttempts | IConfigOnAttempt);
export declare function repeatOnError<T>(delegate: () => T, config: IConfig<T>): T;
export {};
