A quick typescript snippet I reach for often.
Lightweight Result discriminated union.
export type Result<T, E = Error> =
| { ok: true; value: T }
| { ok: false; error: E };
export const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
export const err = <E>(error: E): Result<never, E> => ({ ok: false, error });
export function unwrap<T, E>(r: Result<T, E>): T {
if (!r.ok) throw r.error;
return r.value;
}
Open to suggestions — fork it if you can do better.
Developer Discussions