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:
T extends U ? X : YDacă 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:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseAcest 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:
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
Creați un tip generic numit IsString<T> care returnează tipul literal adevărat dacă T extinde șirul, în caz contrar fals.
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
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.
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