Funkcje predykatów i operator satisfies
Pisanie własnych strażników typów z typami zwracanymi predykatów oraz walidowanie obiektów operatorem satisfies bez rozszerzania typów
Funkcje predykatów i operator satisfies to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Wprowadzenie
Cel: budować funkcje predykatowe, które zawężają typy (np. value is T), oraz używać satisfies do sprawdzania kształtów bez rozszerzania typów.
- Własne guardy = wielokrotnego użytku sprawdzanie w czasie działania
satisfies= sprawdzanie kształtu podczas kompilacji, z zachowaniem literałów
Podstawy predykatów
Funkcja predykatowa zwraca x is Type. Po sprawdzeniu zmienna ma zawężony typ w danym zakresie.
function isNumber(x: unknown): x is number {
return typeof x === "number"
}
function demo(a: unknown) {
if (isNumber(a)) {
// inside: a is number
return a.toFixed(2)
}
return "not a number"
}Guard kształtu
Guard sprawdza kształt obiektów; jeśli sprawdzenie się powiedzie, obiekt zostaje rozpoznany jako User i można go bezpiecznie używać.
type User = { id: number; name: string }
function isUser(v: unknown): v is User {
return typeof v === "object" && v !== null &&
"id" in v && "name" in v &&
typeof (v as any).id === "number" &&
typeof (v as any).name === "string"
}
function printUser(u: unknown) {
if (isUser(u)) {
console.log(u.name.toUpperCase())
} else {
console.log("invalid user")
}
}Przez granice
Guardy zapewniają bezpieczne przekazywanie danych przez granice funkcji: na zewnątrz unknown, a wewnątrz kontrolowany User.
function fetchAndPrint(json: string) {
const value: unknown = JSON.parse(json)
if (isUser(value)) {
// value narrowed to User
console.log(`User #${value.id}: ${value.name}`)
} else {
console.log("Bad payload")
}
}satisfies (konfiguracja)
satisfies sprawdza zgodność wyrażenia z Confige, zachowując jednak literałowy typ zmiennej.
type Config = { mode: "dev" | "prod"; retries: number }
const cfg = {
mode: "prod",
retries: 3,
// timeout: 1000, // Error with satisfies if not in type
} satisfies Config
// cfg.mode is still the literal "prod" (not widened to string)
// and adding unknown keys raises an error at compile-timesatisfies (tablice)
W tablicach kształty elementów są sprawdzane za pomocą as const satisfies; wartości literałowe zostają zachowane, a autouzupełnianie staje się lepsze.
type Route = { path: `/${string}`; method: "GET" | "POST" }
const routes = [
{ path: "/", method: "GET" },
{ path: "/login", method: "POST" }
] as const satisfies ReadonlyArray<Route>
// each element is checked against Route, literals preserved for DXSprawdzanie satisfies
Szybkie sprawdzenie: co właściwie robi satisfies?
Podsumowanie
Podsumowanie: predykaty (x is T) definiują kontrakty, a satisfies potwierdza kształt i zachowuje typy literałowe. Używaj obu mechanizmów razem.
Często zadawane pytania
Czy lekcja „Funkcje predykatów i operator satisfies” jest bezpłatna?
Tak — pełny tekst „Funkcje predykatów i operator satisfies” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Funkcje predykatów i operator satisfies”?
Pisanie własnych strażników typów z typami zwracanymi predykatów oraz walidowanie obiektów operatorem satisfies bez rozszerzania typów Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.
Ile czasu zajmuje lekcja „Funkcje predykatów i operator satisfies”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Kompletne instrukcje switch i sprawdzanie never
- Funkcje predykatów i operator satisfies
- Doprecyzowywanie unii między granicami funkcji