Operatory
satisfies
Sprawdza wartość względem typu, nie poszerzając jej do tego typu.
Czym jest
Dodane w 4.9, by rozwiązać realny dylemat: adnotacja na stałej daje sprawdzenie, ale wyrzuca wszystko, co w niej konkretne, a brak adnotacji zachowuje szczegół i nie sprawdza nic. `satisfies` robi jedno i drugie — ograniczenie jest egzekwowane, a wywnioskowanym typem jest ten wąski, który faktycznie napisałeś.
Przykłady
typeof routes→{ readonly home: "/"; readonly about: "/about"; }typeof widened→{ [x: string]: string; }Adnotacja zapada się do gołej sygnatury indeksu — ograniczenie sprawdzono, a każdy literał przy okazji wyrzucono. Właśnie tej stracie `satisfies` ma zapobiegać.
keyof typeof routes
→"home" | "about"
Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.
Czego nie robi
- Nie zmienia wartości ani emitowanego JavaScriptu. Jak każda konstrukcja na poziomie typów jest wymazywana i nigdy się nie wykonuje.
- To nie rzutowanie. `as` każe kompilatorowi przestać się spierać; `satisfies` prosi go o sprawdzenie i potem milczy o wyniku.
Wniosek
Sięgaj po `as const satisfies X` przy obiektach konfiguracji. Dostajesz egzekwowane ograniczenie i zachowane typy literalne, co kiedyś było wyborem.