0Pricing
TypeScript Academy · Lección

Combinación de claves conocidas y dinámicas

Combine propiedades fijas con firmas de índice de forma segura.

Combinación de claves conocidas y dinámicas es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.

Propiedades fijas y flexibles

A menudo, un objeto tiene algunas propiedades garantizadas y, además, un conjunto abierto de propiedades adicionales. TypeScript permite declarar propiedades con nombre y una signatura de índice en el mismo tipo, con una restricción importante.

Una clave conocida junto a una signatura

Aquí, length siempre está presente, mientras que cualquier otra clave de tipo string se asocia con un número. La propiedad con nombre y la signatura de índice coexisten.

interface NumberMap {
  length: number
  [key: string]: number
}
const m: NumberMap = { length: 2, a: 1, b: 1 }
console.log(m.length, m.a)

La restricción de compatibilidad

La condición es que el tipo de cada propiedad fija debe poder asignarse al tipo de valor de la signatura de índice. La signatura de índice es una promesa sobre todas las claves, por lo que cada clave con nombre debe cumplirla.

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)

Cuando se incumple la restricción

Si el tipo de una propiedad fija no coincide con el tipo de valor del índice, TypeScript la rechaza. Una propiedad con nombre de tipo string no puede formar parte de un diccionario cuyos valores son números.

// interface Broken {
//   name: string   // Error: string not assignable to number
//   [key: string]: number
// }

Ampliación del tipo de valor del índice

Para permitir tipos mixtos en las propiedades fijas, amplíe la signatura de índice a una unión que los incluya a todos. Así, tanto un nombre de tipo string como las puntuaciones numéricas serán válidos.

interface Record {
  name: string
  [key: string]: string | number
}
const r: Record = { name: "ana", score: 10 }
console.log(r.name, r.score)

Propiedades fijas opcionales

Las propiedades fijas pueden ser opcionales mediante ?. Aun así, cuando están presentes deben ser compatibles con la signatura de índice.

interface Config {
  id: string
  label?: string
  [key: string]: string | undefined
}
const c: Config = { id: "x" }
console.log(c.label) // undefined

Por qué las propiedades opcionales necesitan undefined

Como una propiedad opcional puede no existir, su tipo efectivo incluye undefined. Por tanto, la signatura de índice también debe permitir undefined; de lo contrario, TypeScript generará un error sobre el miembro opcional.

interface Safe {
  title?: string
  [key: string]: string | undefined
}
const s: Safe = {}
for (const k in s) console.log(s[k])

Tipos de valor diferentes mediante uniones

Este sería un objeto de configuración realista: una marca booleana conocida, una cadena conocida y valores adicionales arbitrarios. La unión de la signatura abarca los tipos de todas las propiedades fijas.

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 con claves conocidas

La restricción también se aplica a las signaturas de índice numéricas. Una propiedad numérica con nombre debe coincidir con el tipo de valor del í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])

Una alternativa más clara

Cuando las claves fijas y las dinámicas tienen tipos realmente no relacionados, considere separarlas: anide la parte dinámica bajo su propia propiedad. Así evitará imponer una unión poco manejable.

interface Better {
  name: string
  scores: { [key: string]: number }
}
const b: Better = { name: "ana", scores: { math: 90 } }
console.log(b.name, b.scores.math)

Cuándo combinarlas

Combine las claves conocidas y las dinámicas cuando las propiedades fijas compartan de forma natural el tipo de valor de las adicionales, por ejemplo, contadores con un total o configuraciones de un mismo tipo con un par de marcas garantizadas. En caso contrario, anidar las propiedades mantiene la coherencia de los tipos.

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

Comprobación rápida

Compruebe cuánto ha entendido sobre la combinación de claves fijas y dinámicas.

Resumen

Puede declarar conjuntamente propiedades fijas y una signatura de índice, pero el tipo de cada propiedad fija debe poder asignarse al tipo de valor de la signatura. Amplíe la signatura con una unión para admitir distintos tipos de propiedades fijas e incluya undefined cuando estas sean opcionales. Cuando los tipos no estén realmente relacionados, anide la parte dinámica bajo su propia clave.

Preguntas frecuentes

¿La lección «Combinación de claves conocidas y dinámicas» es gratis?

Sí — el texto completo de «Combinación de claves conocidas y dinámicas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Combinación de claves conocidas y dinámicas»?

Combine propiedades fijas con firmas de índice de forma segura. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Combinación de claves conocidas y dinámicas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definición de firmas de índice
  2. Firmas de índice de tipo string frente a number
  3. Combinación de claves conocidas y dinámicas
  4. Firmas de índice frente a Record
← Volver a TypeScript Academy