Case Studies
Report Summary Case
A report summary can group rows, count statuses, and print a compact result.
summary case
Accumulating into a typed summary object is a common pattern for scripts and small services.
Report Summary Case
report.ts
Replay: real traced execution (multi-file project)
type Row = {
status: "pass" | "fail";
};
type Summary = {
pass: number;
fail: number;
};
function summarize(rows: Row[]): Summary {
const summary: Summary = { pass: 0, fail: 0 };
for (const row of rows) {
summary[row.status] += 1;
}
return summary;
}
const includeFailure: boolean = true;
const rows: Row[] = [
{ status: "pass" },
{ status: includeFailure ? "fail" : "pass" },
{ status: "pass" }
];
const summary: Summary = summarize(rows);
console.log(`pass=${summary.pass};fail=${summary.fail}`);
type Row = {
status: "pass" | "fail";
};
type Summary = {
pass: number;
fail: number;
};
function summarize(rows: Row[]): Summary {
const summary: Summary = { pass: 0, fail: 0 };
for (const row of rows) {
summary[row.status] += 1;
}
return summary;
}
const includeFailure: boolean = false;
const rows: Row[] = [
{ status: "pass" },
{ status: includeFailure ? "fail" : "pass" },
{ status: "pass" }
];
const summary: Summary = summarize(rows);
console.log(`pass=${summary.pass};fail=${summary.fail}`);
includeFailure ← true, rows ← [object Object],[object Object],[object Object]
17 return summary;18}1920const includeFailure→ true: boolean = true; //@includeFailure=false21const rows→ [object Object],[object Object],[object Object]: Row[] = [22 { status: "pass" },23 { status: includeFailuretrue ? "fail" : "pass" },24 { status: "pass" }25];26const summary: Summary = summarize(rows[object Object],[object Object],[object Object]);summary ← [object Object], summary[row.status] ← 2
7 fail: number;8};910function summarize(rows[object Object],[object Object],[object Object]: Row[]): Summary {11 const summary→ [object Object]: Summary = { pass: 0, fail: 0 };1213 for (const row of rows) {14 summary[row.status] += 1;15 }1617 return summary[object Object];18}values this step2summary[row.status]summary ← [object Object]
24 { status: "pass" }25];26const summary→ [object Object]: Summary = summarize(rows[object Object],[object Object],[object Object]);2728console.log(`pass=${summary.pass2};fail=${summary.fail1}`);outputpass=2;fail=1
includeFailure ← false, rows ← [object Object],[object Object],[object Object]
17 return summary;18}1920const includeFailure→ false: boolean = false;21const rows→ [object Object],[object Object],[object Object]: Row[] = [22 { status: "pass" },23 { status: includeFailurefalse ? "fail" : "pass" },24 { status: "pass" }25];26const summary: Summary = summarize(rows[object Object],[object Object],[object Object]);summary ← [object Object], summary[row.status] ← 3
7 fail: number;8};910function summarize(rows[object Object],[object Object],[object Object]: Row[]): Summary {11 const summary→ [object Object]: Summary = { pass: 0, fail: 0 };1213 for (const row of rows) {14 summary[row.status] += 1;15 }1617 return summary[object Object];18}values this step3summary[row.status]summary ← [object Object]
24 { status: "pass" }25];26const summary→ [object Object]: Summary = summarize(rows[object Object],[object Object],[object Object]);2728console.log(`pass=${summary.pass3};fail=${summary.fail0}`);outputpass=3;fail=0