El tipo Record de TypeScript, explicado con tus propias claves

Tipo Record de TypeScript

Record<K, V> en TypeScript: objetos de búsqueda tipados | We.Inc

Crea un tipo Record<K, V> con tus propias claves y mira el objeto que describe. Aprende cuándo Record supera a una firma de índice o a un Map, y qué errores detecta.

Record<K, V> es un tipo de utilidad integrado para un objeto cuyas claves vienen de K y cuyos valores son todos de tipo V. Si le das una unión de literales de cadena, el compilador exige que estén todas las claves de la lista. Si le das string a secas, se comporta como un diccionario abierto, igual que una firma de índice.

Record de un vistazo

Escribe las claves que quieres y elige un tipo de valor. El generador escribe el tipo Record, el tipo de objeto simple al que se expande y un objeto inicial con una línea por clave, para que veas exactamente qué te exigirá el compilador antes de pegarlo en tu código.

Preguntas frecuentes

¿Record es lo mismo que una firma de índice?

Con una clave amplia como string, sí: Record<string, number> y { [key: string]: number } describen la misma forma. La diferencia aparece con claves literales. Una firma de índice no puede exigir que existan nombres concretos, mientras que Record<"a" | "b", number> exige tanto a como b.

¿Cuándo debo usar un Map en lugar de un Record?

Usa un Map cuando las claves se añaden y se eliminan a menudo, cuando las claves no son cadenas o cuando necesitas el número de entradas mediante size. Usa un Record para un conjunto fijo de nombres, para objetos de configuración y para cualquier cosa que pases por JSON.stringify.

¿Por qué TypeScript dice que falta una propiedad en mi Record?

Porque el tipo de clave es una unión y el objeto deja fuera uno de sus miembros. tsc informa, por ejemplo, Property 'about' is missing in type '{ home: string; }'. Añade la clave, o envuelve el tipo en Partial si es válido que falte.

¿Record existe en tiempo de ejecución?

No. Es solo un tipo y desaparece al compilar el código. El objeto que creas es un objeto JavaScript normal, así que el compilador no puede impedir que la respuesta de un servidor tenga claves de más o de menos.

¿Qué versión de TypeScript añadió Record?

Record llegó en TypeScript 2.1, junto con Partial, Readonly y Pick, así que cualquier compilador actual lo tiene.

Cómo está construido Record

Claves cerradas frente a claves abiertas

Record, firma de índice o Map

Los patrones que más usarás

Claves a partir de un array as const

El array es la única fuente de verdad. Añádele un estado y el compilador señalará la tabla de etiquetas hasta que añadas también la etiqueta.

Un indicador por cada campo de otro tipo

keyof convierte un tipo existente en la unión de claves, así que el objeto de campos tocados de un formulario siempre lista los mismos campos que el formulario.

Un diccionario abierto, leído de forma segura

Con noUncheckedIndexedAccess activado, una lectura con clave calculada es number | undefined, así que el valor alternativo es obligatorio en lugar de olvidarse.

Generador de tipos Record

Claves, separadas por comas

Tipo de valor

Las claves son opcionales (envolver en Partial)

El tipo

A qué se expande

Un objeto inicial

Escribe al menos una clave. Las claves deben empezar por una letra, _ o $.

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio