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