import { Functions } from '../Functions';
export declare class Optional<T> {
    private readonly value;
    private static readonly EMPTY;
    private constructor();
    static of<T>(value: T | undefined | null): Optional<T>;
    static empty(): Optional<never>;
    get(): T;
    isPresent(): boolean;
    isEmpty(): boolean;
    filter(filterFn: Functions.Filter<T>): Optional<T>;
    map<R>(mapper: Functions.MapFunction<T, R>): Optional<R>;
    flatMap<R>(mapper: Functions.MapFunction<T, Optional<R>>): Optional<R>;
    mapAsync<R>(mapper: Functions.MapFunction<T, Promise<R>>): Promise<Optional<R>>;
    or(provider: Functions.Provider<Optional<T>>): Optional<T>;
    orElse(other: T): T;
    orElseGet(provider: Functions.Provider<T>): T;
    orElseThrow<E extends Error>(provider?: Functions.Provider<E>): T;
    toString(): string;
    equals(another: Optional<T>): boolean;
    property<KEY extends keyof T = keyof T>(key: KEY): Optional<T[KEY]>;
}
