0Pricing
TypeScript Academy · Lekcja

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 validated

satisfies 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" literal

Poró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

  1. Dlaczego istnieje satisfies
  2. satisfies a adnotacja typu
  3. satisfies a asercja as
  4. Praktyczne wzorce satisfies
← Powrót do TypeScript Academy