Map en TypeScript: una colección clave-valor tipada

Map en TypeScript

Map en TypeScript: tipar, recorrer y guardar un Map | We.Inc

Tipa un Map<K, V> en TypeScript, recórrelo, conviértelo a JSON y de vuelta, y decide entre Map, Record y un objeto simple. Prueba un Map en vivo en el navegador.

En TypeScript, un Map es el Map normal de JavaScript con tipos para sus claves y valores: new Map<string, number>(). Las claves pueden ser cualquier valor, las entradas vuelven en el orden en que se añadieron por primera vez, size las cuenta y get devuelve V | undefined. JSON.stringify no serializa un Map, así que conviértelo antes.

Métodos de Map y lo que devuelve TypeScript

El playground de abajo es un Map real que se ejecuta en tu navegador. Añade, actualiza y borra entradas y fíjate en tres cosas: el orden que mantienen las entradas, lo que indica size y la diferencia entre aplicar stringify al propio Map y a una copia convertida.

Preguntas frecuentes

¿Cómo declaro el tipo de un Map en TypeScript?

Pasa los tipos de clave y valor como argumentos genéricos: const prices = new Map<string, number>(). Para un campo o un parámetro, escribe el tipo como Map<string, number>, o ReadonlyMap<string, number> cuando la función solo deba leerlo.

¿Por qué map.get() incluye undefined en su tipo?

Porque el compilador no puede saber qué claves hay en el Map en un momento dado. get está tipado como V | undefined, así que acotas con un if, un valor alternativo con ?? o una comprobación has() antes de tratar el valor como V.

¿Por qué JSON.stringify(map) da {}?

Un Map guarda sus entradas en un espacio interno, no como propiedades de objeto, así que JSON ve un objeto vacío. Conviértelo antes: Object.fromEntries(map) para claves de tipo cadena, o [...map] para un array de pares que funciona con cualquier tipo de clave.

¿Uso un Map o un Record?

Usa un Record para un conjunto fijo de claves con nombre y para datos que van y vienen de JSON. Usa un Map cuando las entradas aparecen y desaparecen mientras se ejecuta la aplicación, cuando las claves son números u objetos, o cuando importa el orden de inserción.

¿Actualizar una clave la mueve al final?

No. Establecer una clave existente cambia su valor pero mantiene su posición original. Para moverla al final, borra la clave y vuelve a establecerla.

Map, Record y un objeto simple

Cómo se comparan las claves

Tipar Maps en las firmas de funciones

Recetas con Map tipado

Contar palabras con un Map

El valor alternativo con ?? cubre la primera aparición de una palabra, por eso que get devuelva number | undefined resulta útil en lugar de molesto.

Guardar un Map como JSON y volver a cargarlo

Un array de pares conserva cada entrada y su orden. Object.fromEntries es la opción más legible cuando todas las claves son cadenas.

Aceptar un Map de solo lectura

Dentro de total, invocar prices.set sería un error de compilación, así que quien la usa puede pasar su Map sin hacer una copia defensiva.

Playground de Map en vivo

Clave

Valor (número)

Establecer

Borrar

Vaciar

Restablecer

Entradas en orden de iteración

El Map está vacío.

size: {n}

Se añadió "{v}".

Se borró "{v}".

"{v}" no está en el Map, así que delete devolvió false.

Escribe primero una clave.

El valor debe ser un número.

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio