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]>; // stringWnioskowanie 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>; // numberWiele 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>; // stringRozdzielanie 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 | numberZagnież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; // SyntaxErrorPodsumowanie: 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
- Poznawanie infer w typach warunkowych
- Tworzenie ReturnType i Parameters od podstaw
- Wzorce głęboko zagnieżdżonego wnioskowania
- Praktyczne zastosowania infer: rozwijanie Promise