如何将Express.js异步箭头函数从JavaScript转换为TypeScript并解决类型报错
错误原因
- 代码结构错误:原JS代码导出的是一个接收theFunc作为参数的高阶函数,但你编写的TS代码错误丢失了外层函数声明,把theFunc当成了要导出的变量,导致TS识别为未定义类型的独立变量。
- 缺少类型标注:你没有给参数theFunc声明明确的类型,TS无法推断其类型,因此抛出
Variable 'theFunc' implicitly has an 'any' type.ts(7005)报错。
解决方案
你可以按照以下代码修改,完全对齐原JS逻辑同时符合TS类型规范:
import { Request, Response, NextFunction, RequestHandler } from "express"; // 定义入参函数的类型:标准Express请求处理函数,可返回Promise或普通值 type AsyncRequestHandler = (req: Request, res: Response, next: NextFunction) => Promise<any> | any; const catchAsyncError = (theFunc: AsyncRequestHandler): RequestHandler => { return (req, res, next) => { Promise.resolve(theFunc(req, res, next)).catch(next); }; }; export default catchAsyncError;
代码说明
- 提前声明
AsyncRequestHandler类型,明确标注入参theFunc的类型,直接消除隐式any报错 - 导出函数的返回值指定为Express内置的
RequestHandler类型,TS会自动推断返回的中间件中req、res、next的类型,无需重复标注 - 功能和原JS代码完全一致,所有异步路由抛出的错误会被自动捕获并传递给next,交由全局错误中间件处理。
内容的提问来源于stack exchange,提问作者chewing gum
相关产品推荐
相关产品推荐

