/// declare module 'optionals' { export interface Option { get(): T; isEmpty(): Boolean; isDefined(): Boolean; contains(value: T): Boolean; exists(predicate: (value: T) => Boolean): Boolean; filter(predicate: (value: T) => Boolean): Option; flatMap(transformer: (value: T) => Option): Option; map(transformer: (value: T) => U): Option; flatten(): Option; getOrElse(other: T): T; orNull(): T; match(matcher: { some: (val: T) => U | void; none: () => U | void; }): U; } export class Some implements Option { value: T; constructor(val: T); get(): T; isEmpty(): Boolean; isDefined(): Boolean; contains(value: T): Boolean; exists(predicate: (value: T) => Boolean): Boolean; filter(predicate: (value: T) => Boolean): Option; flatMap(transformer: (value: T) => Option): Option; map(transformer: (value: T) => U): Option; flatten(): Option; getOrElse(other: T): T; orNull(): T; match(matcher: { some: ((val: T) => U | void); none: (() => U | void); }): U; } export class None implements Option { get(): T; isEmpty(): Boolean; isDefined(): Boolean; contains(value: T): Boolean; exists(predicate: (value: T) => Boolean): Boolean; filter(predicate: (value: T) => Boolean): Option; flatMap(transformer: (value: T) => Option): Option; flatten(): Option; map(transformer: (value: T) => U): Option; getOrElse(other: T): T; orNull(): T; match(matcher: { some: ((val: T) => U | void); none: (() => U | void); }): U; } }