TypeScript Academy · Lekcja

Rozdzielne typy warunkowe

Poznaj sposób rozdzielania warunków między elementy unii.

Lekcja 4 z 413 kroki

Rozdzielne typy warunkowe to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 4 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.

Witamy

Rozdzielne typy warunkowe stosują typ warunkowy osobno do każdego elementu sumy typów. To zaawansowane zachowanie umożliwia przekształcanie i filtrowanie sum typów.

Na czym polega rozdzielanie

Gdy typ warunkowy zawiera samodzielny generyczny parametr T, a T jest sumą typów, TypeScript stosuje warunek osobno do każdego jej elementu.
type Wrap<T> = T extends any ? { value: T } : never;
type R = Wrap<string | number>;
// = { value: string } | { value: number }

Kluczowy warunek

Rozdzielanie zachodzi tylko wtedy, gdy T jest samodzielnym, nieopakowanym parametrem typu generycznego. Opakowanie T w krotkę zapobiega temu.
type Bare<T> = T extends string ? 'yes' : 'no';
type Wrapped<T> = [T] extends [string] ? 'yes' : 'no';
type B = Bare<'a' | 'b'>; // 'yes' | 'yes' = 'yes'
type W = Wrapped<'a' | 'b'>; // 'no' — treated as a tuple

Filtrowanie sum typów za pomocą never

Zwrócenie `never` w gałęzi fałszu odfiltrowuje elementy sumy typów.
type StringsOnly<T> = T extends string ? T : never;
type S = StringsOnly<string | number | boolean>; // string

Wbudowany typ Extract

`Extract` jest zaimplementowany za pomocą rozdzielnego typu warunkowego, który zachowuje elementy możliwe do przypisania do U.
type Extract<T, U> = T extends U ? T : never;
type E = Extract<string | number | boolean, string | number>; // string | number

Wbudowany typ Exclude

`Exclude` usuwa elementy sumy typów możliwe do przypisania do U.
type Exclude<T, U> = T extends U ? never : T;
type Ex = Exclude<string | number | boolean, boolean>; // string | number

Rozdzielanie w ToArray

Zastosuj ToArray osobno do każdego elementu sumy typów dzięki rozdzielaniu.
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]

Przypadek użycia zapobiegania rozdzielaniu

Czasami należy traktować całą sumę typów jako pojedynczy argument typu, zamiast rozdzielać ją na elementy.
type IsUnion<T> = [T] extends [T] ? [T] extends [Exclude<T, T>] ? false : true : false;

Rozdzielne typy mapowane

Połącz rozdzielne typy warunkowe z typami mapowanymi, aby przekształcać wybrane właściwości.
type PickByValue<T, V> = {
  [K in keyof T as T[K] extends V ? K : never]: T[K]
};

Rozdzielny typ warunkowy w ReturnType

Rozdzielne zachowanie sprawia, że `ReturnType` działa poprawnie, gdy T jest sumą typów funkcji.
type Fn = (() => string) | (() => number);
type R = ReturnType<Fn>; // string | number

Rozdzielanie zachłanne a odroczone

TypeScript odracza (nie oblicza) typy warunkowe z niezwiązanymi parametrami typów do czasu ich rozwiązania — jest to leniwe obliczanie.

Szybki sprawdzian

Jaki jest wynik `type R = (string | number) extends string ? 'yes' : 'no'`, gdy T NIE jest samodzielnym typem generycznym?

Podsumowanie

Rozdzielne typy warunkowe stosują się osobno do każdego elementu sumy typów, gdy T jest samodzielnym parametrem generycznym. To zachowanie stanowi podstawę `Extract`, `Exclude` i niestandardowego filtrowania sum typów. Umieść typ w krotce, aby zapobiec rozdzielaniu.
Bezpłatny start

Ucz się TypeScript dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
101
Lekcje
352

Często zadawane pytania

Czy lekcja „Rozdzielne typy warunkowe” jest bezpłatna?

Tak — pełny tekst „Rozdzielne typy warunkowe” 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 „Rozdzielne typy warunkowe”?

Poznaj sposób rozdzielania warunków między elementy unii. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Rozdzielne typy warunkowe”?

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. keyof i typy dostępu indeksowanego
  2. Ograniczenia generyczne: zawężanie parametrów typów
  3. Typy warunkowe: T extends U ? X : Y
  4. Rozdzielne typy warunkowe
← Powrót do TypeScript Academy