import Criterion, { ICriterion } from './Criterion'; export interface ICriteria extends ICriterion { criteria(): Criterion[]; } export class Criteria extends Criterion implements ICriteria { #criteria: Criterion[] = []; constructor(...criteria: Criterion[]) { super(); criteria.forEach((criterion: Criterion): void => { this.#criteria.push(criterion); }); } criteria(): Criterion[] { return this.#criteria; } validate(...args: C): boolean { return this.#criteria.every((criterion: Criterion): boolean => criterion.validate(...args) ); } } export default Criteria;