typescript - Hur man deklarerar typen på en standardexporterad funktion


Jag har flera express-mellanprogram i min kodbas, som var och en är i sin egen fil. Jag vill typa dem alla som express.Handler istället för att skriva typ för varje argument självt.

Mina filer ser i princip ut så här:

export default function exampleMiddleware (req, res, next) {
  res.send(req.body.helloWorld)
}

Men req, res och next behandlas alla som any, eftersom TypeScript inte vet att den här funktionen är tänkt att vara en express.Handler. Vad är det korrekta sättet att göra detta?

Jag vill inte ändra dem till detta, eftersom det är så omständligt:

import * as express from 'express'

export default function exampleMiddleware (
  req: express.Request, 
  res: express.Response, 
  next: express.NextFunction
): void {
  res.send(req.body.helloWorld)
}

Jag försökte:

  • declare function exampleMiddleware: express.Handler, men det står "Overload signatures must all be exported or non-exported"
  • Lägger till let exampleMiddleware: express.Handler, men det står "Sammanfogad deklaration 'exampleMiddleware' kan inte innehålla en standardexportdeklaration."

Svar #1

Om jag undviker standardexporter (som @spender kommenterade), då kan jag faktiskt använda:

export const exampleMiddleware: express.Handler = function exampleMiddleware (
  req, 
  res, 
  next
) {
  res.send(req.body.helloWorld)
}

Vilket är tillräckligt bra för mina ändamål, antar jag.