Salt la conținutul principal
Modulul 6 · Lecția 1 din 211/14 în curs~15 min
Lecții din modul (1/2)

Tipuri condiționale și deduceți

Tipurile condiționate vă permit să exprimați decizii de tip non-trivial bazate pe relații de moștenire. Sintaxa seamănă cu operatorul ternar al JavaScript:

TS
T extends U ? X : Y

Dacă tipul T poate fi atribuit U, atunci tipul rezultat va fi X, altfel va fi Y.


Tipuri condiționale de bază

Un tip condiționat evaluează o condiție în momentul compilării:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

Acest model este extrem de puternic atunci când este combinat cu generice pentru a crea tipuri de utilitare flexibile și dinamice.


Extragere tip cu infer

În cadrul clauzei extends a unui tip condiționat, putem folosi cuvântul cheie infer pentru a declara o variabilă de tip care urmează să fie dedusă de compilator.

De exemplu, dacă dorim să extragem tipul de returnare al unei funcții:

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

type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // string

În acest exemplu, infer R îi spune TypeScript să determine automat tipul de returnare al funcției și să o facă disponibilă ca R în ramura pozitivă a condiționalului.


Încercați-l singur

Exercițiul 1: Tipul IsString

Exercițiu#ts.m6.l1.e1
Încercări: 0Se încarcă…

Creați un tip generic numit IsString<T> care returnează tipul literal adevărat dacă T extinde șirul, în caz contrar fals.

Se încarcă editorul...
Afișează indiciu

Utilizați tipul de sintaxă IsString<T> = T extinde șirul ? adevărat : fals; pentru a verifica tipul.

Soluție disponibilă după 3 încercări

Exercițiul 2: Extragerea unui tip dintr-o matrice cu infer

Exercițiu#ts.m6.l1.e2
Încercări: 0Se încarcă…

Definiți un tip generic UnpackArray<T> care folosește infer pentru a extrage tipul de element al unui tablou T. Dacă T este o matrice (de exemplu U[]), returnați U, în caz contrar returnați același tip T.

Se încarcă editorul...
Afișează indiciu

Utilizați T extins (deduceți U)[] ? U : T pentru a declara și returna variabila de tip dedusă U.

Soluție disponibilă după 3 încercări