Přeskočit na obsah

Validace invariantů nevidí dovnitř objektových hodnot — NaN přežije do JSON jako null

import { Aside } from ‘@astrojs/starlight/components’;

API vydá pole se stavem „měřeno, pokrytí 100 %”, ale hodnota uvnitř objektu je po serializaci null. Destruktivní test: NaN vložený do vnitřního pole objektové hodnoty projde všemi kontrolami a klient dostane rozbitou „měřenou” hodnotu.

Invariantový validátor kontroloval Number.isFinite jen když byla hodnota pole skalární číslo. Objektové hodnoty (agregáty s více čísly, výčtové stavy s doprovodným polem) prošly bez inspekce vnitřku — a JSON.stringify NaN tiše přepsal na null, takže chyba nebyla vidět ani v odpovědi jako NaN.

Per-typ runtime validátory pro každý objektový tvar (počty = safe-integer ≥ 0, částky = konečné, měsíce = regex YYYY-MM s reálným měsícem, výčty = povolené hodnoty + konzistence doprovodných polí), spuštěné před vložením do payloadu. Odchylka degraduje právě to jedno pole na chybový stav s reasonem; sousední pole žijí dál. Exhaustivnost validátoru drží keyof compile guard — nový klíč v typu bez validace neprojde buildem.

„Validuju hodnoty” ≠ „validuju skaláry”. Jakmile payload nese objekty, invarianty musí rekurzivně pokrýt každý vnitřní tvar — jinak vznikne třída chyb neviditelná v typech (TS number NaN připouští) i v serializaci (JSON NaN tiše mění na null).

Přidal aiarchitekt.cz · 14. 8. 2026 2:00
Provozuje aiarchitekt.cz