Vai al contenuto
eLearner.app
Modulo 6 · Lezione 2 di 212/14 nel corso~15 min
Lezioni del modulo (2/2)

Tipi Mappati

I tipi mappati permettono di creare nuovi tipi partendo da tipi esistenti, trasformando le proprietà una ad una. Si basano sulla sintassi dei cicli su chiavi, usando l'operatore keyof.

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

Questo esempio è un tipo mappato identico all'originale: scorre ogni chiave P in keyof T e le assegna lo stesso tipo T[P].


Modificatori di Mutabilità e Opzionalità

Possiamo aggiungere o rimuovere modificatori come readonly e ? (opzionalità) anteponendo + (aggiungi, default) o - (rimuovi).

Ad esempio, per rimuovere l'opzionalità da tutte le proprietà di un tipo (rendendole obbligatorie):

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

Il modificatore -? rimuove il flag di opzionalità da ciascuna proprietà.


Rimappatura delle Chiavi con as

In TypeScript 4.1+, è possibile rimappare le chiavi di un tipo mappato usando la clausola as e i template literal types.

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

Qui stiamo cambiando il nome di ogni proprietà K in set[ChiaveCapitalizzata] e cambiando il suo tipo in una funzione setter.


Prova tu

Esercizio 1: Rendere le Proprietà Nullabili

Esercizio#ts.m6.l2.e1
Tentativi: 0Caricamento…

Dichiara un tipo mappato generico Nullable<T> che prende un oggetto T e trasforma ogni sua proprietà in modo che possa accettare anche il valore null (es. T[K] | null).

Caricamento editor…
Mostra suggerimento

Usa la sintassi [K in keyof T]: T[K] | null; all'interno dell'oggetto del tipo mappato.

Soluzione disponibile dopo 3 tentativi

Esercizio 2: Generare Getters Dinamici con as

Esercizio#ts.m6.l2.e2
Tentativi: 0Caricamento…

Crea un tipo mappato chiamato GetterNames<T> che trasforma le chiavi dell'oggetto T aggiungendo il prefisso 'get' capitalizzando la chiave originale (usa Capitalize). Ad esempio, se una chiave è name, diventerà getName. Imposta il tipo delle proprietà a () => T[K].

Caricamento editor…
Mostra suggerimento

Usa as \`get\${Capitalize<string & K>}\` per rimappare la chiave e () => T[K] come tipo di ritorno della proprietà.

Soluzione disponibile dopo 3 tentativi