Express中TypeScript无法识别错误处理回调参数类型的问题咨询
Express中TypeScript无法识别错误处理回调参数类型的问题咨询
我最近在Express + TypeScript项目里遇到了一个类型推断的问题,想跟大家请教下:
我写了这样一段代码:
import { Router } from "express"; export const skillsRouter = Router() skillsRouter.use((req, res, next) => {}) // Typescript knows the types of req, res and next skillsRouter.use((err, req, res, next) => {}) // TypeScript throws implicit any error skillsRouter.get("/", (req, res) => { res.status(200).json("ok") }) // Typescript again knows the types of req and res
奇怪的是,普通的中间件和GET路由的处理函数里,TypeScript都能自动识别req、res、next的类型,但到了带err参数的错误处理中间件这里,就会抛出“隐式any”的错误,TypeScript完全识别不出这些参数的类型。
我已经知道两种可以解决这个问题的写法:
第一种是用类型断言把函数指定为ErrorRequestHandler:
skillsRouter.use(((err, req, res, next) => {}) as ErrorRequestHandler)
第二种是手动给每个参数声明类型:
skillsRouter.use((err: unknown, req: Request, res: Response, next: NextFunction) => {})
但我还是想搞明白,为什么TypeScript能识别普通中间件和路由处理函数的参数类型,却识别不了错误处理中间件的呢?
备注:内容来源于stack exchange,提问作者Mukadas Maltiti
相关产品推荐
相关产品推荐

