Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
Variable Typecast para extraer datos anidados

Recibo una matriz de objetos anidados de una llamada API de la que necesito extraer información y agruparla para poder mostrarla en una tabla. Estoy usando for (const [key, value] of Object.entries(result)) para recorrer los resultados. Mi código funciona bien, pero me da un error en la yarn build en el paso en el que intento extraer objetos anidados del value . Actualmente estoy haciendo esto usando la notación de puntos como value.property . Código de muestra :

 const result = await HTTPService.get(`myEndpoint/v1`); for (const [key, value] of Object.entries(result)) { name = key; if (value.property1) { myVar = value.myProperty1.subProperty1; } }

Error: Property 'myProperty1' does not exist on type 'value'

El result (respuesta de la llamada a la API) se parece a esto:

 { name1: { myProperty1: { subProperty1: [] subProperty2: {} } myProperty2: {} } }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Si puede garantizar que la respuesta tendrá esa forma, puede encasillarla usando as palabra clave. Puede crear un tipo personalizado de la forma de la respuesta que obtiene (probablemente puede poner any para cualquiera de las subpropiedades que no le interesan, o simplemente ignorarlas por completo) y encasillarla usando ese tipo.

 type MyResType = { name1: { myProperty1: { subProperty1: something[] subProperty2: {...} } myProperty2: {...} } } const result = await HTTPService.get(`myEndpoint/v1`); for (const [key, value] of Object.entries(result as MyResType)) { name = key; if (value.property1) { myVar = value.myProperty1.subProperty1; } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Para que TypeScript detecte que el tipo de value es el tipo de name1 , debe verificar if (key === 'name1') . En el contexto de this if , TypeScript sabrá que el tipo de key es "name1" y luego puede inferir el tipo de result[key] .

 interface Result { name1: { myProperty1: { subProperty1: []; subProperty2: {}; }; myProperty2: {}; }; } const result = await HTTPService.get(`myEndpoint/v1`) as Result; for (const key of Object.keys(result) as Array<keyof Result>) { name = key; if (key === 'name1') { const typedValue = result[key]; // works: TS knows that `typedValue`'s type is `{ myProperty1: ..., myProperty2: ... }` myVar = typedValue.myProperty1.subProperty1; } // doesn't work: `key`'s type in this context is `keyof Result` and not specifically `"name1"` const untypedValue = result[key]; myVar = untypedValue.myProperty1.subProperty1; // ~~~~~~~~~~~~ TS2571: Object is of type 'unknown'. });

Consulte el ejemplo de zona de juegos de TypeScript .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Uso de cadena opcional

Puede usar una cadena opcional para evitar ese tipo de error de verificación.

 for (const [key, value] of Object.entries(result as MyResType)) { name = key; if (value?.property1) { myVar = value.myProperty1.subProperty1; } }

Agregar tipo de respuesta

Como la respuesta de la API es desconocida en el lado de la interfaz. Y podría agregar el tipo de verificación de la respuesta.

Si está seguro del tipo de respuesta, puede definir su tipo de respuesta.

 type ResultType = { name1: { myProperty1: { subProperty1: Array<any> subProperty2: {} } myProperty2: {} } } const result = await HTTPService.get<ResultType>(`myEndpoint/v1`);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda