Lekcje modułu (1/2)
Typy Warunkowe i infer
Typy warunkowe pozwalają na wyrażanie niebanalnych decyzji dotyczących typów w oparciu o relacje dziedziczenia. Składnia przypomina operator trójargumentowy z JavaScript:
T extends U ? X : YJeśli typ T można przypisać do U, to wynikiem będzie typ X, w przeciwnym razie Y.
Podstawowe typy warunkowe
Typ warunkowy ocenia warunek statycznie na poziomie typów:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseTen wzorzec jest niezwykle potężny w połączeniu z typami generycznymi do tworzenia elastycznych i dynamicznych typów pomocniczych.
Wyciąganie typów za pomocą infer
Wewnątrz klauzuli extends typu warunkowego możemy użyć słowa kluczowego infer do zadeklarowania zmiennej typu, która musi zostać wydedukowana przez kompilator.
Na przykład, jeśli chcemy wyciągnąć typ zwracany przez funkcję:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type FunzioneEsempio = () => string;
type Ritorno = GetReturnType<FunzioneEsempio>; // stringW tym przykładzie infer R instruuje TypeScript, aby automatycznie pobrał typ zwracany przez funkcję i uczynił go dostępnym jako R w gałęzi twierdzącej warunku.
Spróbuj sam
Ćwiczenie 1: Typ IsString
Utwórz typ generyczny o nazwie IsString<T>, który zwraca typ literalny true, jeśli T dziedziczy po string, w przeciwnym razie false.
Pokaż wskazówkę
Użyj składni type IsString<T> = T extends string ? true : false; aby sprawdzić typ.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 2: Wyciąganie typu z tablicy za pomocą infer
Zdefiniuj typ generyczny UnpackArray<T>, który używa infer do wyciągnięcia typu elementów tablicy T. Jeśli T jest tablicą (np. U[]), zwraca U, w przeciwnym razie zwraca ten sam typ T.
Pokaż wskazówkę
Użyj T extends (infer U)[] ? U : T aby zadeklarować i zwrócić wydedukowaną zmienną typu U.
Rozwiązanie dostępne po 3 próbach