node.js - '(req: Request, res: IResponse, next: NextFunction) => void' 类型的参数不能使用 express.js 分配给'PathParams' 类型的参数
问题描述
我正在创建一个路由处理程序,我想将它添加到我的路由中:
import { Request, Response, NextFunction } from "express";
interface IResponse extends Response {
error: (code: number, message: string) => Response;
success: (code: number, message: string, result: any) => Response
}
const routeHandler = (req: Request, res: IResponse, next: NextFunction) => {
res.error = (statusCode: number, errorMessage: string) => res.status(statusCode).json(errorMessage);
res.success = (statusCode: number, message: string, result: any) => res.status(statusCode).json({
message,
result
});
return next();
};
export default routeHandler;
当我将此处理程序添加到路由索引文件时:
import { Router } from "express";
import routeHandler from "../utils/helpers";
const routes = Router();
routes.use(routeHandler);
export default routes;
我收到了这个错误:
No overload matches this call.
The last overload gave the following error.
Argument of type '(req: Request, res: IResponse, next: NextFunction) => void' is not assignable to parameter of type 'PathParams'.
Type '(req: Request, res: IResponse, next: NextFunction) => void' is missing the following properties from type '(string | RegExp)[]': pop, push, concat, join, and 25 more.ts(2769)
index.d.ts(55, 5): The last overload is declared here.
解决方案
Express 对您的界面一无所知IResponse
。所以方法无法匹配。
要实现您的想法,请使用模块增强
import { Request, Response, NextFunction } from "express";
declare module 'express-serve-static-core' {
interface Response {
error: (code: number, message: string) => Response;
success: (code: number, message: string, result: any) => Response
}
}
const routeHandler = (req: Request, res: Response, next: NextFunction) => {
res.error = (statusCode: number, errorMessage: string) => res.status(statusCode).json(errorMessage);
res.success = (statusCode: number, message: string, result: any) => res.status(statusCode).json({
message,
result
});
return next();
};
export default routeHandler;
推荐阅读
- excel - Comparing differences in values and returning a YES or NO
- r - 按多个变量分组并总结 dplyr
- reactjs - How can I change what is rendred with a click event in React
- android-studio - 打开/关闭活动时如何让我的所有区域折叠?
- c++ - Two qGraphicsScenes Vs. one qGraphicsScene + duplicate items
- python-3.x - Python3 socket exception handling
- windows - Autohotkey:激活隐藏的应用程序
- javascript - 使用 vue-router 会出现“找不到元素#app”和“TypeError:无法读取未定义的属性‘匹配’”错误
- php - Codeigniter 上的自动内存缓存
- c# - 接收字符串作为内存流并编码后,添加更多字符