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

141
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 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