Map in TypeScript: una collezione chiave-valore tipizzata

Map in TypeScript

Map in TypeScript: tipizzare, iterare e salvare una Map | We.Inc

Tipizza una Map<K, V> in TypeScript, iterala, convertila in JSON e ritorno, e scegli tra Map, Record e un oggetto semplice. Prova una Map dal vivo nel browser.

In TypeScript una Map è la normale Map di JavaScript con i tipi per chiavi e valori: new Map<string, number>(). Le chiavi possono essere qualsiasi valore, le entry tornano nell'ordine in cui sono state aggiunte la prima volta, size le conta e get restituisce V | undefined. JSON.stringify non serializza una Map, quindi convertila prima.

I metodi di Map e cosa restituisce TypeScript

Il playground qui sotto è una vera Map in esecuzione nel tuo browser. Aggiungi, aggiorna ed elimina entry e osserva tre cose: l'ordine che le entry mantengono, cosa riporta size, e la differenza tra fare lo stringify della Map stessa e di una sua copia convertita.

Domande frequenti

Come dichiaro il tipo di una Map in TypeScript?

Passa i tipi di chiave e valore come argomenti generici: const prices = new Map<string, number>(). Per un campo o un parametro, scrivi il tipo come Map<string, number>, oppure ReadonlyMap<string, number> quando la funzione deve solo leggerla.

Perché map.get() ha undefined nel suo tipo?

Perché il compilatore non può sapere quali chiavi sono nella Map in un dato momento. get è tipizzato come V | undefined, quindi restringi con un controllo if, un fallback ?? o un test has() prima di trattare il valore come V.

Perché JSON.stringify(map) restituisce {}?

Una Map tiene le sue entry in uno slot interno, non come proprietà dell'oggetto, quindi JSON vede un oggetto vuoto. Convertila prima: Object.fromEntries(map) per chiavi stringa, oppure [...map] per un array di coppie che funziona con qualsiasi tipo di chiave.

Meglio una Map o un Record?

Usa un Record per un insieme fisso di chiavi con nome e per dati che vanno e vengono da JSON. Usa una Map quando le entry si aggiungono e si tolgono mentre l'app è in esecuzione, quando le chiavi sono numeri o oggetti, o quando conta l'ordine di inserimento.

Aggiornare una chiave la sposta in fondo?

No. Impostare una chiave esistente ne cambia il valore ma mantiene la sua posizione originale. Per spostarla in fondo, elimina la chiave e impostala di nuovo.

Map, Record e oggetto semplice

Come vengono confrontate le chiavi

Tipizzare le Map nelle firme delle funzioni

Ricette con Map tipizzate

Contare le parole con una Map

Il fallback ?? gestisce la prima occorrenza di una parola, ed è per questo che get che restituisce number | undefined è utile invece che fastidioso.

Salvare una Map come JSON e ricaricarla

Un array di coppie mantiene ogni entry e il suo ordine. Object.fromEntries è la scelta più leggibile quando tutte le chiavi sono stringhe.

Accettare una Map in sola lettura

Dentro total, chiamare prices.set sarebbe un errore di compilazione, quindi chi chiama può passare la sua Map senza una copia difensiva.

Playground Map dal vivo

Chiave

Valore (numero)

Imposta

Elimina

Svuota

Ripristina

Entry in ordine di iterazione

La Map è vuota.

size: {n}

Aggiunto "{v}".

Eliminato "{v}".

"{v}" non è nella Map, quindi delete ha restituito false.

Scrivi prima una chiave.

Il valore deve essere un numero.

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito