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

127
Vistas
¿Cómo puedo reducir un tipo de devolución a un tipo más específico en mecanografiado?

Esto surgió cuando trabajaba con la biblioteca mysql2/promise en TypeScript.

Considere el siguiente fragmento (abreviado):

 import {FieldPacket, PoolConnection, RowDataPacket} from 'mysql2/promise'; let connection: PoolConnection = await promisePool.getConnection(); connection.query(FETCH_USER_ID)//returns Promise<[(RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader), FieldPacket[]]> .then((results: [RowDataPacket,FieldPacket[]]) => { fields.UserID = results[0].value; });

Por la semántica de mi consulta, sé con certeza que en este caso específico el tipo de devolución será [RowDataPacket,FieldPacket[]] , pero TypeScript no permite esa asignación porque, por supuesto, es formalmente incorrecta.

El caso en el que formalmente se pueden aplicar varios tipos, pero semánticamente solo uno de ellos o un subconjunto de ellos son posibles en una situación determinada no puede ser tan raro, por lo que asumo que debe haber una solución.

¿Cómo puedo decirle a TypeScript que espere un subconjunto de los tipos teóricamente posibles, preferiblemente sin recurrir a ninguno o ts-ignore?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede escribir el resultado usando el operador as .

 import {FieldPacket, PoolConnection, RowDataPacket} from 'mysql2/promise'; let connection: PoolConnection = await promisePool.getConnection(); connection.query(FETCH_USER_ID)//returns Promise<[(RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader), FieldPacket[]]> .then((res) => { const results = res as [RowDataPacket,FieldPacket[]] fields.UserID = results[0].value; });
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