Complete worked example
typescript
type Result = { ok: true; value: number } | { ok: false; reason: string };
function positive(text: string): Result {
const value = Number(text);
return Number.isInteger(value) && value > 0 ? { ok: true, value } : { ok: false, reason: "Positive integer required" };
}
function errorMessage(error: unknown): string { return error instanceof Error ? error.message : "Unexpected failure"; }- Reasoning
- Conversion and validation are separate operations; the tagged union preserves which result exists.