Combinando Chaves Conhecidas e Dinâmicas
Combine propriedades fixas com assinaturas de índice com segurança.
Combinando Chaves Conhecidas e Dinâmicas é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.
Fixo e Flexible
Frequentemente, um objeto tem algumas propriedades garantidas e também um conjunto aberto de extras. O TypeScript permite declarar propriedades nomeadas e uma assinatura de índice no mesmo tipo — com uma restrição importante.
Uma chave conhecida junto a uma assinatura
Aqui, length está sempre presente, enquanto qualquer outra chave de cadeia de caracteres mapeia para um número. A propriedade nomeada e a assinatura de índice coexistem.
interface NumberMap {
length: number
[key: string]: number
}
const m: NumberMap = { length: 2, a: 1, b: 1 }
console.log(m.length, m.a)A restrição de compatibilidade
A ressalva é que o tipo de cada propriedade fixa deve ser atribuível ao tipo de valor da assinatura de índice. A assinatura de índice é uma promessa sobre todas as keys, então cada chave nomeada deve respeitá-la.
interface Valid {
id: number // ok: number matches the signature
[key: string]: number
}
const v: Valid = { id: 1, score: 99 }
console.log(v.id + v.score)Quando a restrição é violada
Se o tipo de uma propriedade fixa não corresponder ao tipo de valor do índice, o TypeScript a rejeitará. Uma propriedade nomeada por cadeia de caracteres não pode existir em um dicionário cujos valores são numéricos.
// interface Broken {
// name: string // Error: string not assignable to number
// [key: string]: number
// }Ampliando o tipo de valor do índice
Para permitir tipos mistos de propriedades fixas, amplie a assinatura de índice para uma união que abranja todos eles. Agora, tanto um nome de cadeia de caracteres quanto pontuações numéricas são aceitos.
interface Record {
name: string
[key: string]: string | number
}
const r: Record = { name: "ana", score: 10 }
console.log(r.name, r.score)Propriedades fixas opcionais
As propriedades fixas podem ser opcionais com ?. Quando presentes, elas ainda devem ser compatíveis com a assinatura de índice.
interface Config {
id: string
label?: string
[key: string]: string | undefined
}
const c: Config = { id: "x" }
console.log(c.label) // undefinedPor que o opcional exige undefined
Como uma propriedade opcional pode estar ausente, seu tipo efetivo inclui undefined. Portanto, a assinatura de índice também deve permitir undefined, ou o TypeScript reclamará do membro opcional.
interface Safe {
title?: string
[key: string]: string | undefined
}
const s: Safe = {}
for (const k in s) console.log(s[k])Tipos de valores diferentes por meio de uniões
Um objeto de configurações realista: um sinalizador booleano conhecido, uma cadeia de caracteres conhecida e valores extras arbitrários. A união da assinatura abrange o tipo de cada propriedade fixa.
interface Settings {
enabled: boolean
theme: string
[key: string]: boolean | string
}
const s: Settings = { enabled: true, theme: "dark", lang: "en" }
console.log(s.enabled, s.lang)Índice numérico com keys conhecidas
A restrição também se aplica às assinaturas de índice numérico. Uma propriedade numérica nomeada deve corresponder ao tipo de valor do índice numérico.
interface Sparse {
count: number
[index: number]: number
}
const sp: Sparse = { count: 1, 0: 100, 1: 200 }
console.log(sp.count, sp[0])Uma alternativa mais simples
Quando as keys fixas e dinâmicas têm tipos realmente não relacionados, considere separá-las: aninhe a parte dinâmica sob sua própria propriedade. Isso evita forçar uma união inadequada.
interface Better {
name: string
scores: { [key: string]: number }
}
const b: Better = { name: "ana", scores: { math: 90 } }
console.log(b.name, b.scores.math)Quando combinar
Combine keys conhecidas e dinâmicas quando as propriedades fixas compartilharem naturalmente o tipo de valor dos extras — contadores com um total, configurações de um mesmo tipo com alguns sinalizadores garantidos. Caso contrário, o aninhamento mantém os tipos coerentes.
interface Tally {
total: number
[bucket: string]: number
}
const t: Tally = { total: 0, a: 3, b: 5 }
t.total = t.a + t.b
console.log(t.total) // 8Verificação rápida
Teste sua compreensão da combinação de keys fixas e dinâmicas.
Recapitulação
Você pode declarar propriedades fixas e uma assinatura de índice juntas, mas o tipo de cada propriedade fixa deve ser atribuível ao tipo de valor da assinatura de índice. Amplie a assinatura com uma união para acomodar tipos diferentes de propriedades fixas e inclua undefined quando elas forem opcionais. Quando os tipos não tiverem relação alguma, aninhe a parte dinâmica sob sua própria chave.
Perguntas Frequentes
A aula “Combinando Chaves Conhecidas e Dinâmicas” é grátis?
Sim — o texto completo de “Combinando Chaves Conhecidas e Dinâmicas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.
O que vou aprender em “Combinando Chaves Conhecidas e Dinâmicas”?
Combine propriedades fixas com assinaturas de índice com segurança. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar TypeScript Academy?
Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Combinando Chaves Conhecidas e Dinâmicas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de TypeScript Academy?
Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Definindo Assinaturas de Índice
- Assinaturas de Índice de Texto versus Número
- Combinando Chaves Conhecidas e Dinâmicas
- Assinaturas de Índice versus Record