Passer au contenu principal
eLearner.app
Module 6 · Leçon 2 sur 212/14 dans le cours~15 min
Leçons du module (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

Exercice#ts.m6.l2.e1
Tentatives : 0Chargement…

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).

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Esercizio 2: Generare Getters Dinamici con as

Exercice#ts.m6.l2.e2
Tentatives : 0Chargement…

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].

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives