import { Either } from "./either"; export declare abstract class Option { abstract getOrElse(f: () => T): T; abstract getOrElseGet(value: T): T; abstract getOrThrow(err: Error): T; abstract orElse(o: () => Option): Option; abstract toObject(): { some: T | null; }; isDefined(): boolean; isEmpty(): boolean; get(): T; toEither(): Either; equals(other: Option): boolean; toJSON(): { some: T | null; }; toString(): string; } export declare namespace Option { function some(value: T): Some; function none(): None; function nothing(): None; function lift(partialFunction: (...args: any[]) => T): (...args: any[]) => Option; class None extends Option { constructor(); isEmpty(): boolean; getOrElse(f: () => T): T; getOrElseGet(value: T): T; getOrThrow(err?: Error): T; orElse(f: () => Option): Option; toEither(): Either.Left; toObject(): { some: null; }; } class Some extends Option { private value; constructor(value: T); isDefined(): boolean; get(): T; getOrElse(value: () => T): T; getOrElseGet(value: T): T; getOrThrow(err: Error): T; orElse(o: () => Option): Option; toEither(): Either.Right; toObject(): { some: T; }; } }