0Pricing
TypeScript Academy · Lekcja

Poznawanie infer w typach warunkowych

Wyodrębniaj typy wewnętrzne za pomocą infer w klauzulach extends.

Poznawanie infer w typach warunkowych 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.

Czym jest infer?

Słowo kluczowe infer występuje wewnątrz typów warunkowych i pozwala TypeScriptowi przechwycić zmienną typu z dopasowanej pozycji, aby można było użyć jej w gałęzi prawdziwej.

type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;

Podstawowy przykład infer

W tym przykładzie wyodrębniamy typ zwracany przez dowolną funkcję za pomocą infer R.

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>;  // string
type B = ReturnType<() => number[]>; // number[]

Jak działa infer

TypeScript dopasowuje strukturę T do wzorca. Jeśli struktury pasują, wywnioskowana zmienna zawiera dopasowany fragment. W przeciwnym razie wybierana jest gałąź fałszywa.

type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // string

Wnioskowanie z parametrów generycznych

Można wnioskować argument typu generycznego, na przykład wyodrębnić T z Promise.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>;          // number

Wiele zmiennych infer

W jednym typie warunkowym można użyć wielu klauzul infer, aby jednocześnie przechwycić kilka pozycji.

type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;

infer w parametrach funkcji

Infer może przechwytywać również typy parametrów funkcji, a nie tylko typy zwracane.

type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // string

Rozdzielanie typów z infer

Gdy T jest unią, typy warunkowe, w tym te zawierające infer, są rozdzielane na poszczególne składniki unii.

type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | number

Zagnieżdżone infer

Można zagnieżdżać infer, aby docierać głębiej do struktury typu, na przykład wyodrębnić typ wartości tablicy znajdującej się wewnątrz obietnicy.

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;

infer ze wzorcami tekstowymi

Typy literałów szablonowych połączone z infer pozwalają wyodrębniać fragmenty tekstu z typów literałów tekstowych.

type GetDomain<T extends string> =
  T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"

Typowe problemy

Infer działa wyłącznie wewnątrz klauzuli extends typu warunkowego. Użycie go w innym miejscu powoduje błąd kompilacji. Ponadto infer z gałęzi fałszywej nie jest dostępne.

// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxError

Podsumowanie: infer

Słowo kluczowe infer pozwala TypeScriptowi przechwycić fragment typu na podstawie dopasowania strukturalnego w typie warunkowym. Jest wykorzystywane przez typy narzędziowe, takie jak ReturnType, Parameters i Awaited.

Szybkie sprawdzenie

Gdzie można użyć słowa kluczowego infer?

Czego się nauczyłeś

Słowo kluczowe infer umożliwia dopasowywanie wzorców na poziomie typów przez wyodrębnianie fragmentów typów ze struktur. Stanowi podstawę zaawansowanych typów narzędziowych i bezpiecznej typowo metaprogramacji w TypeScript.

Często zadawane pytania

Czy lekcja „Poznawanie infer w typach warunkowych” jest bezpłatna?

Tak — pełny tekst „Poznawanie infer w typach warunkowych” 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 „Poznawanie infer w typach warunkowych”?

Wyodrębniaj typy wewnętrzne za pomocą infer w klauzulach extends. Ć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 „Poznawanie infer w typach warunkowych”?

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. Poznawanie infer w typach warunkowych
  2. Tworzenie ReturnType i Parameters od podstaw
  3. Wzorce głęboko zagnieżdżonego wnioskowania
  4. Praktyczne zastosowania infer: rozwijanie Promise
← Powrót do TypeScript Academy