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

140
Visualizações
Comportamiento extraño de la función de devolución de llamada en Typescript

Estoy tratando de resolver el problema con la función de matriz de filter en Typescript, código a continuación:

 type Tag = string type Args = { tags?: Tag[] } const func = async (args: Args) => { if (args.tags) { const entities = [ { tagId: '1' }, { tagId: '2' } ]; const filtered = entities.filter(entity => args.tags.includes(entity.tagId)); const mapped = args.tags.map(tag => tag + '_test'); } };

Este código arroja el error TS2532: el objeto posiblemente no esté definido cuando intento filtrar la matriz de entities . Por alguna razón, el intérprete de TS cree que args.tags puede no estar definido, por lo que no se puede llamar a la función de include . Pero como puede ver, hay una verificación arriba, también la función de map funciona bien.

¿Qué puede estar mal aquí? Cualquier pensamiento es bienvenido.

Gracias.

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

0

TypeScript no sabe que la devolución de llamada de filter se ejecuta inmediatamente, por lo que si, por ejemplo, la devolución de llamada de filter se ejecutara más tarde (digamos en un setTimeout ), su código se bloquearía con una llamada como esta:

 const a: Args = { tags: [] }; await func(a); a.tags = undefined; // Later, the callback runs and accesses 'includes' of the undefined we just set

¡Puedes usar !

 entity => args.tags!.includes ...

O esconder el valor en una const

 const tags = args.tags; if (tags) { // ... const filtered = entities.filter(entity => tags.includes ...
about 4 years ago · Juan Pablo Isaza Relatório

0

type Args = { tags?: Tag[] // this means --> tags: Tag[] | undefined }

Use el encadenamiento opcional y la fusión nula dentro Array.filter() .

const filtered = entities.filter(entity => args?.tags?.includes(entity.tagId));

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