import { Construct, Constructor } from './Constructor';
import { Validatable } from './Validatable';
import { Get } from './Get';
import { Func } from './Func';
import { Optional } from './Types';
export declare abstract class Try<T = unknown> implements Validatable {
    is: {
        defined: (prop?: Func<unknown, T>) => Try<T>;
        empty: (prop?: Func<unknown, T>) => Try<T>;
        valid: (prop?: Func<unknown, T>) => Try<T>;
        true: (prop?: Func<unknown, T>) => Try<T>;
        false: (prop?: Func<unknown, T>) => Try<T>;
        not: {
            defined: (prop?: Func<unknown, T>) => Try<T>;
            empty: (prop?: Func<unknown, T>) => Try<T>;
            valid: (prop?: Func<unknown, T>) => Try<T>;
        };
    };
    if: {
        defined: (prop?: Func<unknown, T>) => Try<T>;
        empty: (prop?: Func<unknown, T>) => Try<T>;
        valid: (prop?: Func<unknown, T>) => Try<T>;
        true: (prop?: Func<unknown, T>) => Try<T>;
        false: (prop?: Func<unknown, T>) => Try<T>;
        not: {
            defined: (prop?: Func<unknown, T>) => Try<T>;
            empty: (prop?: Func<unknown, T>) => Try<T>;
            valid: (prop?: Func<unknown, T>) => Try<T>;
        };
    };
    abstract get value(): T;
    abstract get error(): Error;
    abstract get isValid(): boolean;
    static of: <T_1>(c: Get<T_1 | Try<T_1>>, ...args: unknown[]) => Try<T_1>;
    abstract map<U>(f: Func<U | Try<U>, T>): Try<U>;
    abstract recover(f: Func<T | Try<T>, Error>): Try<T>;
    abstract recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T>;
    abstract accept(f: Func<void, T>): Try<T>;
    abstract filter(predicate: Func<boolean, T>): Try<T>;
    abstract or(value: Get<T>): T;
    abstract orElse(value?: Get<T>): Optional<T>;
    abstract orThrow(error: Construct<Error>): T;
}
export declare const tryTo: <T>(c: Get<T | Try<T>>, ...args: unknown[]) => Try<T>;
