我目前正在从事一个涉及Typescript 3+,并表示4+和node 8+的项目。我正在尝试扩展express的Response对象,以在例如API检测到错误时发送HTTP状态代码。我似乎无法弄清楚如何在不使用中间件定义我要添加的Response扩展函数的情况下扩展Response对象。我希望能够仅使用Response原型来定义我想添加的功能,但我不知道或不知道这是否可行。这是我所做的:
projectA / declarations / express.extensions.d.ts:
import * as e from "express"
declare global {
namespace Express {
interface Response {
send100(): e.Response;
}
}
}
export {}
下面是我想像这样定义原型函数定义的地方,但这还没有编译...
projectA /扩展名/ 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脚本进行转换,而我看到的唯一实现此方法的方法是在定义函数的地方运行中间件,但这对于每个单个请求都会发生。是否有我正在探索的选项,或者中间件是唯一的选择?
谢谢。
的Response
成员express-serve-static-core
只是一个接口,而不是您可以扩展的带有原型的类,因此当您将其Response
称为值时,TypeScript会将其解析Response
为DOM API的不相关类。您要扩展的原型对象是模块的response
成员express
(请参见此答案)。它没有在中声明@types/express
,但您可以自己声明:
declare module "express" {
const response: Response;
}
然后在中ResponseExtensions.ts
,您可以编写:
import * as e from "express";
import { Response } from "express-serve-static-core";
e.response.send100 = function(): e.Response {
var response = this as Response;
response.status(100).end();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句