Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

180
Visualizações
¿Cómo manejar el tipo de JSON entrante cuyo contenido no conozco?

Tengo el siguiente código ...

 let services = [] fetch('http://localhost:11492/api') .then(r => r.json()) .then(r => { for (const service in r.services) { r.services.service = service services.push(r.services[service]) } })

... que ESLint marca con ...

 ESLint: Unsafe member access .services on an `any` value. (@typescript-eslint/no-unsafe-member-access)

... en varios lugares, comenzando con r en el ...

 for (const service in r.services)

... línea.

El problema es que no sé cuál será el contenido exacto del contenido JSON. Solo sé que tendrá una estructura como

 { "services": { "something": { // anything can happen here }, "somethingElse": { // anything can happen here, different from the above }, (...) }

pero el contenido de las entradas no está definido.

Mi pregunta: ¿cómo puedo expresar la estructura JSON anterior como un tipo correspondiente?

Pensé que podría emitir este (primer) error como

 for (const service in r.services as Record<string, any>)

pero no ayuda porque el problema es con el tipo de r en sí.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Analizar JSON es difícil para mecanografiado porque ningún código de tiempo de compilación puede garantizar la estructura de datos de ese JSON. Por lo tanto, debe escribir fuertemente lo que pueda y dejar el resto como unknown .

En este caso, creo que se vería así:

 interface MyJson { services: Record<string, unknown> } let services: unknown[] = [] fetch('http://localhost:11492/api') .then(r => r.json()) // r.json() returns Promise<any> .then((r: MyJson) => { // assume any is your known JSON structure for (const service in r.services) { r.services.service = service services.push(r.services[service]) } })

Tenga en cuenta cómo services se escriben como unknown[] , porque afirma que la estructura de datos más allá literalmente no se puede conocer en el momento de la compilación. Así que este tipo es el único tipo que tiene sentido.

unknown no es un tipo con el que pueda hacer mucho con ningún tipo de seguridad, porque Typescript no puede imponer nada sobre su uso. Tal vez esté bien porque solo está pasando a otra cosa, como escribir en un archivo.

Pero mi corazonada es que hay una estructura para esos datos, podría ser complejo. Puede involucrar uniones de múltiples valores o tipos de plantillas de cadenas , pero probablemente haya una manera de escribir ese tipo si estudia la documentación. Y luego editaría el tipo MyJson para que coincida con ese tipo.

También puede escribir predicados para probar valores unknown para cosas específicas y convertirlos de forma segura en tipos conocidos.

Sin embargo, hay muchas maneras de manejar esto. Y la solución correcta depende de cuál sea la estructura de datos, qué tan confiable es el formato de los datos para que sean consistentes, qué tan importante es que el uso sea seguro en su programa y muchos otros factores.

about 4 years ago · Juan Pablo Isaza Relatório

0

Luego establezca el tipo de r :

 .then((r: { services: Record<string, any> }) => { for (const service in r.services) { r.services.service = service services.push(r.services[service]) } })
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda