Al intentar mapear las claves de los datos, recibo varios errores de mecanografiado y no entiendo por qué. Recibo como respuesta de mi API un objeto con claves genéricas de la siguiente manera:
{ 1: { name: 'test1', country: 'test1', }, 2: { name: 'test2', country: 'test2', } ....generic amount of keys }He definido el siguiente tipo de mecanografiado para esto:
export type Users<T> = { [K in keyof T]: { name: string; country: string; }; };Cuando intento mapear las claves de este objeto escrito en mi componente, recibo un error de mecanografiado:
Object.keys(data).map((key) => { <p>{data[key].name}</p> })Error en la línea Object.keys(data):
datos constantes: Usuarios | undefined Ninguna sobrecarga coincide con esta llamada.
Sobrecarga 1 de 2, '(o: {}): string[]', dio el siguiente error. Argumento de tipo 'Usuarios | undefined' no se puede asignar a un parámetro de tipo '{}'. El tipo 'indefinido' no se puede asignar al tipo '{}'. Sobrecarga 2 de 2, '(o: objeto): string[]', dio el siguiente error. Argumento de tipo 'Usuarios | undefined' no se puede asignar a un parámetro de tipo 'objeto'. El tipo 'indefinido' no se puede asignar al tipo 'objeto'.ts(2769) No hay arreglos rápidos disponibles
Error en datos[clave].nombre:
El objeto es posiblemente 'indefinido'.
De la referencia noUncheckedIndexedAccess :
TypeScript tiene una forma de describir objetos que tienen claves desconocidas pero valores conocidos en un objeto, a través de firmas de índice.
Activar
noUncheckedIndexedAccessagregaráundefineda cualquier campo no declarado en el tipo.
Puede usar el operador de aserción no nulo (¡postfijo ! ) para informar al compilador que el valor definitivamente existe. Aquí hay un ejemplo:
import {default as React} from 'react'; type User = { name: string; country: string; } const data: Record<string, User> = { 1: { name: 'test1', country: 'test1', }, 2: { name: 'test2', country: 'test2', }, // ....generic amount of keys }; Object.keys(data).map(key => (<p>{data[key]!.name}</p>)); // ^ // The non-null assertion operator will assert // to the compiler that the value exists