type Ok = { ok: true; value: T };
type Err = { ok: false; error: string };
type Result = Ok | Err;
function parseIntSafe(s: string): Result {
const n = Number.parseInt(s, 10);
return Number.isNaN(n) ? { ok: false, error: 'NaN' } : { ok: true, value: n };
}
Exhaustive switches
type State = { kind: 'idle' } | { kind: 'loading' } | { kind: 'error'; message: string };
function render(s: State) {
switch (s.kind) {
case 'idle': return 'Idle';
case 'loading': return 'Loading';
case 'error': return s.message;
default: const _x: never = s; return _x; // ensure exhaustive
}
}