Map no TypeScript: uma coleção chave-valor tipada

Map no TypeScript

Map no TypeScript: tipar, percorrer e salvar um Map | We.Inc

Tipe um Map<K, V> no TypeScript, percorra, converta para JSON e de volta, e decida entre Map, Record e um objeto simples. Teste um Map ao vivo no navegador.

No TypeScript, um Map é o Map comum do JavaScript com tipos para as chaves e os valores: new Map<string, number>(). As chaves podem ser qualquer valor, as entradas voltam na ordem em que foram adicionadas pela primeira vez, size as conta e get retorna V | undefined. JSON.stringify não serializa um Map, então converta antes.

Métodos do Map e o que o TypeScript retorna

O playground abaixo é um Map de verdade rodando no seu navegador. Adicione, atualize e apague entradas e observe três coisas: a ordem que as entradas mantêm, o que size informa e a diferença entre fazer stringify do próprio Map e de uma cópia convertida.

Perguntas frequentes

Como declaro o tipo de um Map no TypeScript?

Passe os tipos da chave e do valor como argumentos genéricos: const prices = new Map<string, number>(). Para um campo ou parâmetro, escreva o tipo como Map<string, number>, ou ReadonlyMap<string, number> quando a função só deve ler.

Por que map.get() tem undefined no tipo de retorno?

Porque o compilador não tem como saber quais chaves estão no Map em um dado momento. get é tipado como V | undefined, então você estreita com um if, um fallback ?? ou um teste com has() antes de tratar o valor como V.

Por que JSON.stringify(map) retorna {}?

Um Map guarda as entradas em um slot interno, não como propriedades do objeto, então o JSON enxerga um objeto vazio. Converta antes: Object.fromEntries(map) para chaves string, ou [...map] para um array de pares que funciona com qualquer tipo de chave.

Devo usar um Map ou um Record?

Use um Record para um conjunto fixo de chaves nomeadas e para dados que vão e vêm em JSON. Use um Map quando as entradas entram e saem enquanto a aplicação roda, quando as chaves são números ou objetos, ou quando a ordem de inserção importa.

Atualizar uma chave a move para o final?

Não. Definir uma chave existente muda o valor, mas mantém a posição original. Para movê-la para o final, apague a chave e defina de novo.

Map, Record e um objeto simples

Como as chaves são comparadas

Tipando Maps em assinaturas de função

Receitas de Map tipado

Conte palavras com um Map

O fallback ?? trata a primeira aparição de uma palavra, e é por isso que get retornar number | undefined ajuda em vez de atrapalhar.

Salve um Map como JSON e carregue de volta

Um array de pares mantém todas as entradas e a ordem delas. Object.fromEntries é a opção mais legível quando todas as chaves são strings.

Aceite um Map somente leitura

Dentro de total, chamar prices.set seria um erro de compilação, então quem chama pode passar o próprio Map sem fazer uma cópia defensiva.

Playground de Map ao vivo

Chave

Valor (número)

Definir

Apagar

Limpar

Redefinir

Entradas na ordem de iteração

O Map está vazio.

size: {n}

"{v}" adicionada.

"{v}" apagada.

"{v}" não está no Map, então delete retornou false.

Digite uma chave primeiro.

O valor precisa ser um número.

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site