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

317
Vistas
Tipos de inferencia de la función contenedora de TypeScript

Uso una pequeña función de utilidad/contenedor para funciones relacionadas con las operaciones de la base de datos. Debería tomar una función específica fn con el tipo Promise<PromiseReturnType<GENERIC>> , luego hacer algunas cosas (aquí: verificar la conexión) antes de ejecutarlo:

 // File `A.ts` type PromiseReturnType<T = undefined> = {success: boolean, response: T } const DatabaseOperation = <Fn extends (...args: any) => Promise<PromiseReturnType<Data>>, Data>(fn: (...args: any) => Promise<PromiseReturnType<Data>>) => { return async function (...args: Parameters<Fn>): Promise<PromiseReturnType<Data>> { if (!isConnected) return Promise.reject({ success: false, response: new Error("Not connected to the Database!") }) return await fn(...args) } }

Entonces lo uso como:

 // File `B.ts` const dbOperation = async (myArg: number): Promise<PromiseReturnType<string> => { return Promise.resolve({ success: true, response: `hello world ${myArg}` }) } export default DatabaseOperation<typeof dbOperation, string>(dbOperation)

Funciona bien, excepto que no se puede inferir el tipo de retorno. Será Promise<any> excepto Promise<PromiseReturnType<string>> .

El uso de esa función recién envuelta se verá así:

 import dbOperation from "B.ts" (function () { await dbOperation() // Type: dbOperation(myArg: number): Promise<any> })()

¿Alguna sugerencia sobre cómo resolver esto o implementarlo mejor en general?

Agradezco su ayuda, gracias.

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

0

Ya casi estabas allí:

 declare var isConnected: boolean; type PromiseReturnType<T = undefined> = { success: boolean, response: T } const DatabaseOperation = <Data, Fn extends (...args: any[]) => Promise<PromiseReturnType<Data>>,>(fn: (...args: any[]) => Promise<PromiseReturnType<Data>>) => { return async function (...args: Parameters<Fn>): Promise<PromiseReturnType<Data>> { if (!isConnected) return Promise.reject({ success: false, response: new Error("Not connected to the Database!") }) return await fn(...args) } } const dbOperation = (myArg: number): Promise<PromiseReturnType<string>> => Promise.resolve({ success: true, response: `hello world ${myArg}` }) const fn = DatabaseOperation(dbOperation) const result = fn(42) // Promise<PromiseReturnType<string>>

Patio de juegos

Deberías tener que hacer ...args una matriz any[] en lugar de any

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