type Ok<T> = { ok: true; value: T };
type Err<E> = { ok: false; error: E };
type Result<T, E = Error> = Ok<T> | Err<E>;
const ok = <T>(value: T): Ok<T> => ({ ok: true, value });
const err = <E>(error: E): Err<E> => ({ ok: false, error });
function parseJson<T>(s: string): Result<T, SyntaxError> {
try { return ok(JSON.parse(s) as T); }
catch (e) { return err(e as SyntaxError); }
}
const r = parseJson<{ name: string }>('{"name": "Alice"}');
if (r.ok) {
console.log(r.value.name); // narrowed to Ok
} else {
console.error(r.error.message); // narrowed to Err
}
Create a free account and build your private vault. Share publicly whenever you want.