export declare abstract class Optional<Value> {
    static empty<Value>(): Optional<Value>;
    static of<Value>(value: Value): Optional<Value>;
    static ofUndefinable<Value>(value: Value | undefined): Optional<Value>;
    abstract map<Output>(mapper: (value: Value) => Output): Optional<Output>;
    abstract flatMap<Output>(mapper: (feature: Value) => Optional<Output>): Optional<Output>;
    abstract or(factory: () => Optional<Value>): Optional<Value>;
    abstract orElse(value: Value): Value;
    abstract orElseGet(factory: () => Value): Value;
    abstract orElseThrow<U = Error>(throwable?: () => U): Value;
    abstract filter(predicate: (value: Value) => boolean): Optional<Value>;
    abstract isEmpty(): boolean;
    abstract isPresent(): boolean;
    abstract ifPresent(consumer: (feature: Value) => void): void;
    abstract toArray(): Value[];
}
