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

Tipuri mapate

Tipurile mapate vă permit să creați noi tipuri prin transformarea proprietăților celor existente, unul câte unul. Acestea sunt construite pe partea de sus a sintaxei buclei peste chei folosind operatorul keyof.

TS
type Mapped<T> = {
  [P in keyof T]: T[P];
};

Acest exemplu arată un tip mapat identic cu cel original: se repetă peste fiecare tastă P din keyof T și atribuie același tip T[P].


Modificatori de mutabilitate și opționalitate

Putem adăuga sau elimina modificatori precum readonly și ? (opționalitate) prefixându-le cu + (adăugați, implicit) sau - (eliminați).

De exemplu, pentru a elimina opționalitatea din toate proprietățile unui tip (făcându-le necesare):

TS
type Concrete<T> = {
  [P in keyof T]-?: T[P];
};

Modificatorul -? elimină indicatorul de opționalitate din fiecare proprietate.


Remapare cheie cu as

În TypeScript 4.1+, puteți remapa cheile într-un tip mapat utilizând clauza as și tipurile literal de șablon.

TS
type WriteSetters<T> = {
  [K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};

Aici schimbăm numele fiecărei proprietăți K în set[CapitalizedKey] și modificăm tipul acesteia într-o funcție setter.


Încercați-l singur

Exercițiul 1: Faceți ca proprietăți să fie anulate

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

Declarați un tip mapat generic Nullable<T> care preia un obiect T și transformă fiecare proprietate astfel încât să poată accepta și valoarea null (de exemplu, T[K] | null).

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

Utilizați sintaxa [K în cheia T]: T[K] | nul; în interiorul obiectului tip mapat.

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

Exercițiul 2: Generarea generatoarelor dinamice cu as

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

Creați un tip mapat numit GetterNames<T> care transformă cheile obiectului T prefixându-le cu „get” și scriind cu majuscule cheia originală (utilizați Capitalize). De exemplu, dacă o cheie este nume, ar trebui să devină getName. Setați tipul proprietăților la () => T[K].

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

Folosiți ca \`get\${Capitalize<string & K>}\` pentru a remapa cheia și () => T[K] ca tip de returnare a proprietății.

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