0Pricing
TypeScript Academy · Aula

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) // undefined

Por 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) // 8

Verificaçã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

  1. Definindo Assinaturas de Índice
  2. Assinaturas de Índice de Texto versus Número
  3. Combinando Chaves Conhecidas e Dinâmicas
  4. Assinaturas de Índice versus Record
← Voltar para TypeScript Academy