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

Validation Summary Case

validation.ts
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 = ;
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 = ;
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}`);
validation summary A summary object makes validation outcomes easy to replay and inspect.