@sevinf/maybe
Version:
Maybe/Optional type implementation in Typescript. Main motivation for creating this library was handling `null` values in deeply nested data, coming from GraphQL APIs, but the library itself is not limited to GraphQL.
19 lines (18 loc) • 853 B
TypeScript
export declare type Defined<T> = Exclude<T, null | undefined>;
export declare type RemoveMaybe<T> = T extends Maybe<infer Inner> ? Inner : T;
declare type MaybeOnce<T> = Maybe<RemoveMaybe<T>>;
declare type MapCallback<T, U> = (arg: Defined<T>) => U;
export interface Maybe<T> {
isNone(): boolean;
orElse(fallback: Defined<T>): Defined<T>;
orCall(getFallback: () => Defined<T>): Defined<T>;
orNull(): Defined<T> | null;
orThrow(message?: string): Defined<T>;
map<U>(f: MapCallback<T, U>): MaybeOnce<U>;
get<K extends keyof Defined<T>>(key: K): MaybeOnce<Defined<T>[K]>;
}
export declare const none: Maybe<any>;
export declare function isMaybe(value: unknown): value is MaybeOnce<any>;
export declare function maybe<T>(value: T | null | undefined): MaybeOnce<T>;
export declare function some<T>(value: T): Maybe<T>;
export {};