Dlaczego istnieje satisfies
Poznaj lukę między adnotacją a wnioskowaniem, którą wypełnia satisfies
Dlaczego istnieje satisfies to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 1 z 4. 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 4 lekcji w sumie.
Dwa sprzeczne cele
Podczas deklarowania konfiguracji zwykle chodzi o dwie rzeczy: walidację względem znanego kształtu oraz precyzyjne wnioskowanie wartości literalnych. Te cele często ze sobą kolidują.
type Color = "red" | "green" | "blue";
// We want both: check the values AND remember exactly which ones.Adnotacja traci zawężenie do literałów
Dodanie adnotacji typów sprawdza poprawność obiektu, ale poszerza typy wartości. Kompilator zapomina dokładne literały zapisane w kodzie.
type Config = { color: string; retries: number };
const cfg: Config = { color: "red", retries: 3 };
// cfg.color is string, not "red" anymore.
console.log(cfg.color.toUpperCase());Dlaczego poszerzanie typów szkodzi
Jeśli color zostanie poszerzone do string, utraci Pan/Pani możliwość używania go w miejscach wymagających konkretnej wartości literalnej, na przykład przy indeksowaniu innego typu.
const cfg = { color: "red" } as { color: string };
// const exact: "red" = cfg.color; // Error: string not assignable to "red"
console.log(cfg.color);Brak adnotacji oznacza brak walidacji
Usunięcie adnotacji zachowuje precyzyjne wnioskowanie, ale usuwa siatkę bezpieczeństwa. Literówki i nieprawidłowe kształty pozostają niezauważone.
const cfg = { color: "rad", retries: 3 };
// No error on the typo "rad" because nothing validates it.
console.log(cfg.color);Luka w walidacji
Bez sprawdzenia nieprawidłowa wartość, na przykład błędnie zapisana nazwa koloru, cicho przepływa przez program i może spowodować awarię daleko od miejsca popełnienia błędu.
const palette = { primary: "blu" }; // typo, no error
console.log(palette.primary); // "blu"Czas na operator satisfies
Operator satisfies sprawdza poprawność wyrażenia względem typu, jednocześnie zachowując precyzyjny wywnioskowany typ. To najlepsze połączenie obu podejść.
type Config = { color: string; retries: number };
const cfg = { color: "red", retries: 3 } satisfies Config;
console.log(cfg.color); // type is "red", value validatedsatisfies zachowuje literały
Po użyciu satisfies cfg.color nadal ma literalną wartość "red", a nie szeroki typ string. Wnioskowanie zostaje zachowane.
type Config = { color: string };
const cfg = { color: "red" } satisfies Config;
const exact: "red" = cfg.color; // OK
console.log(exact);satisfies nadal sprawdza poprawność
Jeśli obiekt nie pasuje do typu, satisfies zgłasza błąd, tak samo jak adnotacja typów.
type Config = { retries: number };
// const bad = { retries: "three" } satisfies Config; // Error
const good = { retries: 3 } satisfies Config;
console.log(good.retries);Przykład uzasadniający zastosowanie
Proszę rozważyć mapę tras, w której klucze muszą oznaczać znane trasy, a wartości są nazwami handlerów. Chcemy uzyskać autouzupełnianie kluczy ORAZ walidację wartości — właśnie to zapewnia satisfies.
type Routes = Record<string, { method: "GET" | "POST" }>;
const routes = {
home: { method: "GET" },
submit: { method: "POST" }
} satisfies Routes;
console.log(routes.home.method); // "GET" literalPorównanie trzech podejść
Adnotacja: sprawdza poprawność, ale poszerza typy. Brak adnotacji: zapewnia precyzję, ale nie sprawdza poprawności. satisfies: sprawdza poprawność i zachowuje precyzję. W przypadku konfiguracji trzecie podejście wygrywa.
type C = { color: string };
const a: C = { color: "red" }; // widened
const b = { color: "red" }; // unvalidated
const c = { color: "red" } satisfies C; // validated + precise
console.log(a.color, b.color, c.color);Kiedy sięgać po satisfies
Proszę używać satisfies za każdym razem, gdy definiowana stała wartość musi być zgodna z typem, ale później chce Pan/Pani korzystać z jej dokładnej zawartości.
type Sizes = Record<string, number>;
const sizes = { sm: 8, md: 16, lg: 24 } satisfies Sizes;
// keys "sm" | "md" | "lg" stay known for autocomplete
console.log(sizes.md);Szybki test: dlaczego satisfies
Proszę sprawdzić, czy rozumie Pan/Pani, dlaczego istnieje satisfies.
Podsumowanie: dlaczego istnieje satisfies
Adnotacje sprawdzają poprawność, ale poszerzają typy, brak adnotacji zachowuje precyzję, lecz nie zapewnia walidacji, a satisfies łączy walidację z precyzyjnym wnioskowaniem — idealnym w przypadku obiektów konfiguracyjnych.
type C = { color: string };
const c = { color: "blue" } satisfies C;
const exact: "blue" = c.color;
console.log(exact);Często zadawane pytania
Czy lekcja „Dlaczego istnieje satisfies” jest bezpłatna?
Tak — pełny tekst „Dlaczego istnieje 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 4 lekcji w sumie.
Co nauczysz się w „Dlaczego istnieje satisfies”?
Poznaj lukę między adnotacją a wnioskowaniem, którą wypełnia satisfies Ć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 1 z 4.
Ile czasu zajmuje lekcja „Dlaczego istnieje 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
- Dlaczego istnieje satisfies
- satisfies a adnotacja typu
- satisfies a asercja as
- Praktyczne wzorce satisfies