@ehrelein/nothrow
Version:
Type-safe error handling
30 lines (28 loc) • 1.3 kB
TypeScript
interface Helper<T> {
readonly flat: unknown;
map<U>(fn: (arg: T) => U): Result<U>;
log(): Result<T>;
log(end: number): Result<T>;
log(start: number, end: number): Result<T>;
slice(): string;
slice(end: number): string;
slice(start: number, end: number): string;
}
interface OkResult<T> extends Helper<T> {
readonly ok: true;
readonly invert: null;
readonly value: T;
}
interface ErrResult<T> extends Helper<T> {
readonly ok: false;
readonly invert: true;
readonly error: Error;
}
type Result<T> = OkResult<T> | ErrResult<T>;
declare function Ok<T>(value: T): Result<T>;
declare function Err(error: Error | string): Result<never>;
declare function safeCall<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => Promise<TReturn>, ...args: TArgs): Promise<Result<Awaited<TReturn>>>;
declare function safeCall<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => TReturn, ...args: TArgs): Result<TReturn>;
declare function wrap<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<Result<Awaited<TReturn>>>;
declare function wrap<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => TReturn): (...args: TArgs) => Result<TReturn>;
export { Err, Ok, type Result, safeCall, wrap };