Record<K, V>

Última atualização: 2026-10-22

Record<K, V> Record

Record<K, V> constrói um tipo de objeto com chaves K e valores V. K pode ser uma união literal (tabelas de consulta de enum) ou string/number (objetos de cache abertos). Em comparação com assinaturas de índice escritas à mão, Record declara os tipos de chave e valor uma única vez e os reutiliza em toda parte.

GrupoTipos Utilitários
TipoTipo
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

type Record<K extends string | number | symbol, V> = {
  [P in K]: V;
};

// Uso
type Timeout = Record<"dev" | "staging" | "prod", number>;
type Cache = Record<string, number>;

⚙️ Parâmetros

KO tipo de chave: uma união literal torna cada chave obrigatória; string/number/symbol produz um conjunto de chaves aberto
VO tipo de valor compartilhado por todas as chaves

Retorno:Um tipo mapeado com uma entrada por membro de K, todos com o tipo V.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

15000 3000
128

(Saída de execução após a transpilação; Record<Env, number> exige as três chaves — omitir staging produz error TS2739)

💡 Observações

ℹ️ Info Implementação: type Record<K, V> = { [P in K]: V } — o tipo mapeado transforma cada chave de K em um V. Por isso Record<"a"|"b", number> exige tanto a quanto b.
⚠️ Atenção Record<string, V> retorna V (não V | undefined) para qualquer acesso por chave, mesmo quando a chave está ausente. No modo estrito, ativar noUncheckedIndexedAccess adiciona undefined aos resultados de acesso indexado, o que reflete melhor a realidade.
💡 Dica Para inverter chaves e valores ou derivar uma união de chaves a partir de um objeto: keyof typeof obj fornece a união de chaves, e Record<keyof typeof obj, NewValue> constrói uma tabela isomórfica — útil para mapear valores de enum a textos de exibição.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Como Record<K, V> difere de uma assinatura de índice { [key: string]: V }?
R Com uma união literal em K, Record exige que cada chave esteja presente (uma verificação de completude) que assinaturas de índice não têm; quando K é string, os dois são equivalentes em tipos. Use Record com uma união literal quando a completude das chaves importa.
P Os valores de um Record podem diferir por chave?
R Record força um único V compartilhado. Para formatos de valor por chave, use um tipo mapeado: { [K in Env]: { url: string; retries: number } }, ou declare uma interface Config e reutilize via Record<Env, Config>.
P Devo usar um Map em vez de Record?
R Depende: chaves fixas, necessidade de serialização JSON e verificação de completude favorecem Record; chaves que crescem dinamicamente, chaves não string e adições/remoções frequentes favorecem Map<string, number>. As semânticas de tipo diferem — não os misture de forma casual.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%