Angulars Typ `ValidationErrors` ist `{ [key: string]: any }`, was bedeutet, dass ein Validator jede beliebige Form unter jedem beliebigen Schlüssel anhängen kann und das Typsystem einen Konsumenten nicht davon abhält, sie falsch zu lesen — die Sicherheit muss durch Konvention entstehen, nicht durch Inferenz. `DateRangeErrors` als benanntes Interface zu deklarieren und vor der Rückgabe genau die beschriebene literale Form zu konstruieren, macht den Vertrag des Validators zu etwas, das ein Code-Reviewer oder ein zukünftiges Refactoring mit bloßem Auge prüfen kann, und der Rückgabetyp von `readRangeError` dokumentiert präzise, welche Form Aufrufer von `form.errors?.['rangeInverted']` erwarten sollten — auch wenn `errors` selbst an der Framework-Grenze untypisiert bleibt.
import { FormGroup, FormControl, ValidatorFn, ValidationErrors } from '@angular/forms';interface DateRangeErrors {rangeInverted: { start: string; end: string };}function dateRangeValidator(): ValidatorFn {return (group): ValidationErrors | null => {const start = group.get('start')?.value as string | null;const end = group.get('end')?.value as string | null;if (!start || !end) {return null;}if (new Date(start) > new Date(end)) {const error: DateRangeErrors = {rangeInverted: { start, end },};return error;}return null;};}const form = new FormGroup({start: new FormControl<string | null>(null),end: new FormControl<string | null>(null),},{ validators: dateRangeValidator() },);function readRangeError(): DateRangeErrors['rangeInverted'] | undefined {return form.errors?.['rangeInverted'];}