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

322
Visualizações
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 Respostas
Responde à pergunta

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