/** * An Option represents a collection of size 0 or 1. Traditionally it's used as a replacement for * `null` or `undefined` to explicitly encode if a value can be empty or not. * * :TODO: Narrow self-type in `getOrElse` and `orElse` interfaces. */ interface Option { isDefined: boolean; isEmpty: boolean; equals(other: Option): boolean; filter(predicate: (value: A) => boolean): Option; filterNot(predicate: (value: A) => boolean): Option; flatMap(flatMapper: (value: A) => Option): Option; foreach(run: (value: A) => void): void; get(): A; getOrElse(defaultValue: () => B): B; map(mapper: (value: A) => B): Option; match(matcher: { Some: (a: A) => B; None: () => B; }): B; orElse(alternative: () => Option): Option; } declare function Option(value: A | null | undefined): Option; declare namespace Option { /** * This error is thrown when `None.get()` is called. */ class NoSuchElementError extends Error { constructor(); } function flatten(options: Array>): Array; } export { Option };