Tengo una matriz de objetos como este:
[ { "bio": "Douglas Gerald Hurley is an American engineer, former Marine Corps pilot and former NASA astronaut. He launched into space for the third time as commander of Crew Dragon Demo-2.", "images": { "png": "./assets/crew/image-douglas-hurley.png", "webp": "./assets/crew/image-douglas-hurley.webp" }, "name": "Douglas Hurley", "role": "Commander" }, { "bio": "Mark Richard Shuttleworth is the founder and CEO of Canonical, the company behind the Linux-based Ubuntu operating system. Shuttleworth became the first South African to travel to space as a space tourist.", "images": { "png": "./assets/crew/image-mark-shuttleworth.png", "webp": "./assets/crew/image-mark-shuttleworth.webp" }, "name": "Mark Shuttleworth", "role": "Mission Specialist" }, { "bio": "Pilot on the first operational flight of the SpaceX Crew Dragon to the International Space Station. Glover is a commander in the US Navy where he pilots an F/A-18.He was a crew member of Expedition 64, and served as a station systems flight engineer.", "images": { "png": "./assets/crew/image-victor-glover.png", "webp": "./assets/crew/image-victor-glover.webp" }, "name": "Victor Glover", "role": "Pilot" }, { "bio": "Anousheh Ansari is an Iranian American engineer and co-founder of Prodea Systems. Ansari was the fourth self-funded space tourist, the first self-funded woman to fly to the ISS, and the first Iranian in space.", "images": { "png": "./assets/crew/image-anousheh-ansari.png", "webp": "./assets/crew/image-anousheh-ansari.webp" }, "name": "Anousheh Ansari", "role": "Flight Engineer" } ]Escribí eso con firma de índice:
export type PlanetInfo = { [key: string]: string; }[];pero por supuesto también están las "imágenes" clave que son objetos, resuelvo ese comportamiento con:
export type PlanetInfo = { [key: string]: any; }[];pero no creo que el uso de 'cualquiera' sea correcto. ¿Hay una mejor manera?
Respondiendo objetivamente a tu pregunta, esta es mi oportunidad:
//if these are optional mark them so with `?` also if there are more formats you support you could add them here as well type Image = { png: string, webp: string, } export type PlanetInfo = { [key: string]: string | Image; }[];Sin embargo, siento que su tipo es menos "libre" que el que acabamos de definir. Qué pasa :
type PlanetInfo = { bio: string, images: Image //same type as above, name: string, role: string, //maybe this one is an enum (can have only a set of values, check the api documentation of wherever you're getting this value }[]