Validation logic can produce a typed summary instead of only a yes-or-no answer.

validation summary A summary object makes validation outcomes easy to replay and inspect.

Validation Summary Case

minimumScore
validation.ts
Replay: real traced execution (multi-file project)
type Submission = {
    name: string;
    score: number;
};

type ValidationSummary = {
    accepted: number;
    rejected: number;
};

function summarize(submissions: Submission[], minimumScore: number): ValidationSummary {
    const summary: ValidationSummary = { accepted: 0, rejected: 0 };

    for (const submission of submissions) {
        if (submission.score >= minimumScore) {
            summary.accepted += 1;
        } else {
            summary.rejected += 1;
        }
    }

    return summary;
}

const minimumScore: number = 70;
const submissions: Submission[] = [
    { name: "alpha", score: 95 },
    { name: "beta", score: 68 },
    { name: "gamma", score: 82 }
];
const summary: ValidationSummary = summarize(submissions, minimumScore);

console.log(`accepted=${summary.accepted};rejected=${summary.rejected}`);
type Submission = {
    name: string;
    score: number;
};

type ValidationSummary = {
    accepted: number;
    rejected: number;
};

function summarize(submissions: Submission[], minimumScore: number): ValidationSummary {
    const summary: ValidationSummary = { accepted: 0, rejected: 0 };

    for (const submission of submissions) {
        if (submission.score >= minimumScore) {
            summary.accepted += 1;
        } else {
            summary.rejected += 1;
        }
    }

    return summary;
}

const minimumScore: number = 90;
const submissions: Submission[] = [
    { name: "alpha", score: 95 },
    { name: "beta", score: 68 },
    { name: "gamma", score: 82 }
];
const summary: ValidationSummary = summarize(submissions, minimumScore);

console.log(`accepted=${summary.accepted};rejected=${summary.rejected}`);
  1. minimumScore ← 70, submissions ← [object Object],[object Object],[object Object]

    22    return summary;23}2425const minimumScore→ 70: number = 70;  //@minimumScore=9026const submissions→ [object Object],[object Object],[object Object]: Submission[] = [27    { name: "alpha", score: 95 },28    { name: "beta", score: 68 },29    { name: "gamma", score: 82 }30];31const summary: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore70);
  2. summary ← [object Object]

    8    rejected: number;9};1011function summarize(submissions[object Object],[object Object],[object Object]: Submission[], minimumScore70: number): ValidationSummary {12    const summary→ [object Object]: ValidationSummary = { accepted: 0, rejected: 0 };
  3. if (submission.score >= minimumScore)

    pass 1 of 2
    14for (const submission of submissions) {15    if (submission.score95 >= minimumScore70) {16        summary.accepted += 1;17    } else {
  4. if (submission.score >= minimumScore)

    pass 2 of 2
    14for (const submission of submissions) {15    if (submission.score82 >= minimumScore70) {16        summary.accepted += 1;17    } else {
  5. return summary;

    19        }20    }2122    return summary[object Object];23}
  6. summary ← [object Object]

    29    { name: "gamma", score: 82 }30];31const summary→ [object Object]: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore70);3233console.log(`accepted=${summary.accepted2};rejected=${summary.rejected1}`);
    outputaccepted=2;rejected=1
  1. minimumScore ← 90, submissions ← [object Object],[object Object],[object Object]

    22    return summary;23}2425const minimumScore→ 90: number = 90;26const submissions→ [object Object],[object Object],[object Object]: Submission[] = [27    { name: "alpha", score: 95 },28    { name: "beta", score: 68 },29    { name: "gamma", score: 82 }30];31const summary: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore90);
  2. summary ← [object Object]

    8    rejected: number;9};1011function summarize(submissions[object Object],[object Object],[object Object]: Submission[], minimumScore90: number): ValidationSummary {12    const summary→ [object Object]: ValidationSummary = { accepted: 0, rejected: 0 };
  3. if (submission.score >= minimumScore)

    14for (const submission of submissions) {15    if (submission.score95 >= minimumScore90) {16        summary.accepted += 1;17    } else {
  4. return summary;

    19        }20    }2122    return summary[object Object];23}
  5. summary ← [object Object]

    29    { name: "gamma", score: 82 }30];31const summary→ [object Object]: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore90);3233console.log(`accepted=${summary.accepted1};rejected=${summary.rejected2}`);
    outputaccepted=1;rejected=2