Case Studies
API Response Case
A tagged response shape lets code handle successful data and errors predictably.
tagged response
A discriminated response object keeps success and error handling in one explicit branch.
API Response Case
response.ts
Replay: real traced execution (multi-file project)
type ApiResponse =
| { ok: true; value: number }
| { ok: false; error: string };
function label(response: ApiResponse): string {
if (response.ok) {
return `value:${response.value}`;
}
return `error:${response.error}`;
}
const requestOk: boolean = true;
const response: ApiResponse = requestOk
? { ok: true, value: 42 }
: { ok: false, error: "missing" };
console.log(label(response));
type ApiResponse =
| { ok: true; value: number }
| { ok: false; error: string };
function label(response: ApiResponse): string {
if (response.ok) {
return `value:${response.value}`;
}
return `error:${response.error}`;
}
const requestOk: boolean = false;
const response: ApiResponse = requestOk
? { ok: true, value: 42 }
: { ok: false, error: "missing" };
console.log(label(response));
requestOk ← true, response ← [object Object]
10 return `error:${response.error}`;11}1213const requestOk→ true: boolean = true; //@requestOk=false14const response→ [object Object]: ApiResponse = requestOktrue15 ? { ok: true, value: 42 }16 : { ok: false, error: "missing" };1718console.log(label(response[object Object]));function label(response: ApiResponse): string
2 | { ok: true; value: number }3 | { ok: false; error: string };45function label(response[object Object]: ApiResponse): string {6 if (response.ok) {if (response.ok)
5function label(response: ApiResponse): string {6 if (response.oktrue) {7 return `value:${response.value42}`;8 }console.log(label(response));
15 ? { ok: true, value: 42 }16 : { ok: false, error: "missing" };1718console.log(label(response[object Object]));outputvalue:42
requestOk ← false, response ← [object Object]
10 return `error:${response.error}`;11}1213const requestOk→ false: boolean = false;14const response→ [object Object]: ApiResponse = requestOkfalse15 ? { ok: true, value: 42 }16 : { ok: false, error: "missing" };1718console.log(label(response[object Object]));function label(response: ApiResponse): string
2 | { ok: true; value: number }3 | { ok: false; error: string };45function label(response[object Object]: ApiResponse): string {6 if (response.ok) {7 return `value:${response.value}`;8 }910 return `error:${response.errormissing}`;11}console.log(label(response));
15 ? { ok: true, value: 42 }16 : { ok: false, error: "missing" };1718console.log(label(response[object Object]));outputerror:missing