我目前正在处理一个涉及Typescript 3+、Express 4+和Node 8+的项目。我试图扩展Express的Response对象,例如,如果API检测到错误,则发送HTTP状态码。但是,我似乎无法找出如何在不使用中间件的情况下扩展Response对象,以定义我想要添加的Response扩展函数。我希望能够只使用Response原型来定义我想要添加的函数,但我不知道或无法弄清楚是否可能。这是我做过的事情:
projectA/declarations/express.extensions.d.ts:
以下是我想要定义原型函数的方式,但这并不编译...
项目A/extensions/ResponseExtensions.ts
import * as e from "express"
declare global {
namespace Express {
interface Response {
send100(): e.Response;
}
}
}
export {}
以下是我想要定义原型函数的方式,但这并不编译...
项目A/extensions/ResponseExtensions.ts
import * as e from "express";
import { Response } from "express-serve-static-core";
Response.prototype.send100 = function(): e.Response {
var response = this as Response;
response.status(100).end();
}
然后最后消费...
ProjectB/Server.ts
import * as express from "express"
app.get('/getData'
request: express.Request,
response: express.Response) : void {
// yada yada...
response.send100();
}
我似乎无法让ResponseExtensions.ts脚本转译。而我所能想到的另一种实现方式是运行中间件,在其中定义函数,但这将会发生在每个请求中。是否有其他选项可供选择?还是中间件是唯一的途径?
谢谢。
ResponseExtensions.ts
应该在哪里导入?我们应该在哪里声明模块? - Vincent Guyard