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

Typescript 扩展快速响应类型,并将我的新类型导出为新模块,typescript,express,npm,export,Typescript,Express,Npm,Export,我想为我的团队创建一个新的“通用”模块。 它应该包括响应和请求对象(express)的扩展 我们希望实现两件事——第一件是扩展请求以拥有用户属性——这将在为我们进行所有身份验证的中间件中初始化 第二件事-我们想创建关于如何返回错误的约定,因此我想扩展express的reponse类型,使用一个名为sendError的方法,该方法将接收exception/erormsg并创建响应。=>我想做的不仅仅是扩展一个接口,我也想提到它 到目前为止,我创建了一个新模块,在其中创建了一个文件types.d.t

我想为我的团队创建一个新的“通用”模块。 它应该包括响应和请求对象(express)的扩展

我们希望实现两件事——第一件是扩展请求以拥有用户属性——这将在为我们进行所有身份验证的中间件中初始化

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

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

import {User} from '../models/user.ts'
declare module 'express'{
    export interface Request {
user: User;
}
}
在我的模型中,我可以看到适当的用户请求,并且一切都很好。 问题是,当我们的服务从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 

为什么不扩展名称空间呢?以下是对我有效的方法:

我通常有一个文件
/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;
  }
}
检查以了解更多信息