我正在尝试使用 TypeScript 和 Express。我已经从 Typings 加载了类型声明,它们看起来像这样:
// Generated by typings
// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/express/express.d.ts
declare module "express" {
import * as serveStatic from "serve-static";
import * as core from "express-serve-static-core";
/**
* Creates an Express application. The express() function is a top-level function exported by the express module.
*/
function e(): core.Express;
namespace e {
/**
* This is the only built-in middleware function in Express. It serves static files and is based on serve-static.
*/
var static: typeof serveStatic;
export function Router(options?: any): core.Router;
interface Application extends core.Application { }
interface CookieOptions extends core.CookieOptions { }
interface Errback extends core.Errback { }
interface ErrorRequestHandler extends core.ErrorRequestHandler { }
interface Express extends core.Express { }
interface Handler extends core.Handler { }
interface IRoute extends core.IRoute { }
interface IRouter<T> extends core.IRouter<T> { }
interface IRouterMatcher<T> extends core.IRouterMatcher<T> { }
interface MediaType extends core.MediaType { }
interface NextFunction extends core.NextFunction { }
interface Request extends core.Request { }
interface RequestHandler extends core.RequestHandler { }
interface RequestParamHandler extends core.RequestParamHandler { }
export interface Response extends core.Response { }
interface Router extends core.Router { }
interface Send extends core.Send { }
}
export = e;
}
现在我正在尝试扩展所有 Response 对象的原型,如下所示:
const express = require('express');
express.response.sendWrapped = function(obj: Object, meta?: Object) {
return this.json({
data: obj
});
};
现在我只需要将扩展名放入打字中。我很想将此方法扩展到现有定义中,就像我在原型中扩展它的方式一样,但我不确定如何去做。
由于这是库类型定义的个人扩展,我认为这不属于主类型集,我不应该为了自己的目的手动修改它们。以我自己的方式扩展它们的最佳方法是什么?我可以在不覆盖依赖于响应的所有其他部分的情况下做到这一点吗?