ProgramaciónDesarrollador Fullstack

¿Cómo funcionan los Tipos de Acceso Indexado (tipo de acceso por índice, como T[K])? ¿Cuándo aplicarlos, cómo evitar errores al cambiar la estructura del tipo y cuál es su papel en objetos complejos?

Supere entrevistas con el asistente de IA Hintsage

Respuesta

Tipos de Acceso Indexado (o tipos de acceso por índice) permiten hacer referencia al tipo de una propiedad específica de un objeto o de cualquier clave a través de la sintaxis T[K]. Es una herramienta poderosa para crear abstracciones flexibles y seguras en términos de tipo.

Ejemplo:
type Persona = { nombre: string; edad: number; }; type TipoNombre = Persona['nombre']; // string type EdadONombre = Persona['edad' | 'nombre']; // number | string

Se utiliza para escribir tipos y funciones genéricas:

function obtenerPropiedad<T, K extends keyof T>(obj: T, clave: K): T[K] { return obj[clave]; // tipificación correcta del retorno } const usuario = { email: 'a@a.ru', id: 1 }; let id = obtenerPropiedad(usuario, 'id'); // id: number

Para qué:

  • Para crear tipos constructores (por ejemplo, extrayendo el tipo de valor por clave de estructuras anidadas complejas).
  • Construcción de tipos auxiliares (Record, Pick, etc.)

Matices:

  • Al cambiar el tipo original (Persona) también cambia el resultado del acceso indexado, y esto puede afectar inesperadamente las vinculaciones en todos los lugares.
  • TS no captura la situación si la clave no existe: Persona['salario'] — error en tiempo de compilación.

Pregunta trampa

Pregunta: ¿Qué tipo resultará de la expresión type Foo = {a: number, b: string}["a" | "b" | "c"]?

Respuesta: Este ejemplo provocará un error de compilación porque 'c' no es una clave en el tipo al que se accede. TypeScript generará el error:

Type '"c"' does not satisfy the constraint '"a" | "b"'.

Ejemplos de errores reales por desconocer los matices del tema.


Historia

En el proyecto se generaban dinámicamente formularios basados en tipos. Después de agregar un nuevo campo al tipo principal, no se actualizaron los lugares con indexación por claves, como resultado algunos propiedades no se incluían en el formulario, aunque a nivel de tipo se esperaba un mapeo completo. El error se manifestaba solo en tiempo de ejecución, no en la etapa de desarrollo.


Historia

En una biblioteca para validación de datos se utilizó acceso indexado a través de tipos, pero al migrar el código, se trasladó una de las claves del objeto al padre. El antiguo tipo indexado causó un error de compilación, sin embargo, el error ocurrió solo después de la reconstrucción debido a la caché en CI, y anteriormente vivió en staging durante varias semanas.


Historia

Se creía erróneamente que con los Tipos de Acceso Indexado se podía acceder a cualquier clave, incluso si no estaba enumerada explícitamente, lo que llevó a una generación incorrecta de pruebas automáticas para propiedades dinámicas. Como resultado, las pruebas no cubrían parte de los escenarios posibles, ya que el compilador excluía estos casos como no válidos.