[key: string]: T Assinaturas de índice
Última atualização: 2026-10-22
[key: string]: T Assinaturas de índice
Assinaturas de índice descrevem objetos com chaves arbitrárias mas um tipo de valor uniforme — dicionários, contadores, mapas de configuração. Escritas como [key: string]: T.
| Grupo | Composição de Tipos |
|---|---|
| Tipo | Sintaxe |
| Modo strict | Nã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
const dict: { [key: string]: number } = {};
dict["a"] = 1;
// Escrita equivalente com tipo utilitário
const same: Record<string, number> = {};
⚙️ Parâmetros
| [key: string] | O tipo da chave deve ser string, number, symbol ou uma união; o nome da key é arbitrário |
|---|---|
| [i: number] | [i: number]: T descreve acesso por índice; o tipo do índice number deve ser subtipo do índice string |
Retorno:Nenhum valor de retorno — assinaturas de índice existem apenas na camada de tipos e não produzem código em tempo de execução.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
180 0
(Saída de execução após a transpilação; scores["Bob"] é tipado como number sem erro — assinaturas de índice declaram que toda chave existe)
💡 Observações
ℹ️ Info Record<string, number> significa o mesmo que { [key: string]: number }; a forma utilitária é mais comum.
⚠️ Atenção Assinaturas de índice tornam toda chave legal: scores["Bob"] passa mesmo sob strict, e erros de digitação escapam. Para um conjunto finito de chaves, use Record<"a" | "b", T> ou mapped types.
💡 Dica Para valores mistos, use uma união — { [key: string]: string | number } — e estreite após ler.
🏷️ Composição de Tipos Relacionada
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Assinatura de índice vs Record<K, V>?
R Equivalentes em poder — Record é uma assinatura de índice implementada via mapped types. Record é mais conciso e também pode fixar uma união exata de chaves.
P Por que acessar uma chave inexistente não dá erro?
R Essa é a semântica: toda chave string existe com tipo T. Para capturar erros de digitação, fixe as chaves com Record<"a" | "b", T> ou ative noUncheckedIndexedAccess.
P Assinaturas de índice number e string podem coexistir?
R Sim, mas o tipo de valor do índice number deve ser subtipo do do índice string (chaves numéricas do JS viram chaves string por baixo dos panos).