UNPKG

typescript-monads

Version:
104 lines 3 kB
import { IMonad } from '../monad/monad.interface'; import { IResult } from '../result/result.interface'; /** * Define a contract to unwrap Maybe object */ export interface IMaybePattern<TIn, TOut> { /** * Function to handle when a value exists. */ some(val: NonNullable<TIn>): TOut; /** * Function to handle when a value is undefined. */ none(): TOut; } /** * Abstraction for handling possibility of undefined or null values */ export interface IMaybe<T> extends IMonad<T> { of(x: T): IMaybe<T>; /** * Unwrap a Maybe with a default value */ valueOr(val: NonNullable<T>): T; /** * Unwrap a Maybe with its value or return undefined if its empty */ valueOrUndefined(): T | undefined; /** * Unwrap a Maybe with its value or return null if its empty */ valueOrNull(): T | null; /** * Unwrap a Maybe with its value or return and empty list */ toArray(): ReadonlyArray<T>; /** * Unwrap a Maybe with a default computed value */ valueOrCompute(f: () => NonNullable<T>): T; /** * Unwrap a Maybe with the final value or throw an error */ valueOrThrow(msg?: string): T; /** * Unwrap a Maybe with the final value or throw an error */ valueOrThrowErr(err?: Error): T; /** * Execute functions with side-effects. */ tap(val: Partial<IMaybePattern<T, void>>): void; /** * Execute a function with side-effects when maybe is a none. */ tapNone(f: () => void): void; /** * Execute a function with side-effects when maybe is a some. */ tapSome(f: (val: T) => void): void; /** * Unwrap and apply MaybePattern functions */ match<R>(pattern: IMaybePattern<T, R>): R; /** * Map output of non-empty data to a new value */ map<R>(f: (t: T) => NonNullable<R>): IMaybe<R>; /** * Map to a new value while ignoring previous output value but respecting maybeness */ mapTo<R>(v: NonNullable<R>): IMaybe<R>; /** * Returns true if value is not empty */ isSome(): boolean; /** * Return true if value is empty */ isNone(): boolean; /** * Combine multiple Maybe */ flatMap<R>(f: (t: T) => IMaybe<R>): IMaybe<R>; /** * Combine multiple Maybe, automatically wrapping predicate */ flatMapAuto<R>(fn: (v: NonNullable<T>) => R): IMaybe<NonNullable<R>>; /** * drill into Just values */ project<R extends T[keyof T]>(fn: (d: NonNullable<T>) => R): IMaybe<NonNullable<R>>; /** * Apply a predicate which if met, continues the Maybe chain, * otherwise return an empty Maybe */ filter(fn: (t: T) => boolean): IMaybe<T>; /** * Apply a function wrapped in Maybe */ apply(maybe: IMaybe<ReturnType<T extends (...args: any) => any ? T : any>>): IMaybe<T>; toResult<E>(error: E): IResult<T, E>; } //# sourceMappingURL=maybe.interface.d.ts.map