扩展express响应类型,并将我的新类型导出为新模块



Im-tring为我的团队创建一个新的"公共"模块。它应该包含的内容之一是(express的(响应和请求对象的扩展。

我们想实现两件事-第一件事是将Request扩展为具有用户属性-这将在为我们做所有身份验证的中间件中初始化。

第二件事-我们想创建一个关于如何返回错误的约定,因此我想扩展express的response类型,使其具有一个名为sendError的方法,该方法将接收exception/ermsg并创建响应。=>我想做的不仅仅是扩展一个接口,我也想把它简化。

到目前为止,我创建了一个新模块,在其中我创建了文件types.d.ts,并将该文件添加到tsconfig中的"types"中。

import {User} from '../models/user.ts'
declare module 'express'{
export interface Request {
user: User;
}
}

在我的moudle中,我可以看到合适的用户请求,一切都很好。问题是,当我们的服务从npm安装这个模块时,它不熟悉这个属性。

第二个问题是,我是如何实现我的第二个目标的?它更像是扩展一个接口,更像是在扩展一个类,因为我想给出一个简单的

我想过这样的事情:

import {User} from '../models/user.ts'
declare module 'express'{
export interface Response {
sendError: (statusCode : number, error :Error ) => void;
}
}
express.Response.sendError = //put the logic here 

为什么不扩展命名空间?以下是适用于我的:

我通常有一个文件<project-root>/types/express.d.ts。在您的情况下,内容将是:

import {User} from '../models/user.ts'
declare namespace Express{
export interface Request {
user: User
}
export interface Response {
sendError: (statusCode : number, error :Error ) => void;
}
}

查看快递明确类型以了解更多

最新更新