Typescript 无法识别扩展的express请求对象
我在TypeScript(3.8.3)中创建了一个全局express请求错误处理程序Typescript 无法识别扩展的express请求对象,typescript,Typescript,我在TypeScript(3.8.3)中创建了一个全局express请求错误处理程序 从“express”导入express 从“http问题详细信息”导入{ProblemDocument} 常量registerExpressProblemJsonResponse=():void=>{ express.response.httpProblemJSON=函数(problemDocument):void{//第5行 this.set('Content-Type','application/probl
从“express”导入express
从“http问题详细信息”导入{ProblemDocument}
常量registerExpressProblemJsonResponse=():void=>{
express.response.httpProblemJSON=函数(problemDocument):void{//第5行
this.set('Content-Type','application/problem+json')
此.status(problemDocument.status)
此。发送(问题文档)
}
}
导出{registerExpressProblemJsonResponse}
从“express”导入{NextFunction,Request,Response}
const GlobalRequestErrorHandler=(记录器:any)=>{
返回(
错误:错误,
请求:,
res:答复,
下一步:NextFunction
):void=>{
logger.error(`${req.method}${req.url}错误:${err}`,{error:err})
如果(!res.headersSent){
返回res.httpProblemJSON(//第25行
新问题文档({状态:500,类型:'https://tempuri.org/error' })
)
}否则{
logger.warn(
`[global request error handler]${req.method}${req.url}具有返回响应的错误路径`
)
}
}
}
导出{GlobalRequestErrorHandler}
我扩展了express请求对象(src/types/types.d.ts
):
从“http问题详细信息”导入{ProblemDocument}
声明命名空间表达式{
导出接口响应{
httpProblemJSON(problemDocument:problemDocument):无效
}
}
这是我的tsconfig.json
:
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"declaration": true,
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": ["node_modules/*", "src/types/*"]
}
},
"include": ["src/**/*"]
}
我安装了“@types/express”:“^4.17.3”
和“express”:“^4.17.1”
运行tsc
时,会出现以下错误:
src/index.ts:5:20-错误TS2339:类型“Response”上不存在属性“httpProblemJSON”您对Express的声明错误
它应该是这样的:
声明全局{
名称空间表达式{
界面响应{
httpProblemJSON(problemDocument:problemDocument):无效
}
}
}
请提供回购协议。这真的很奇怪,因为它在我的项目中工作。我更新了我的问题,并在最后添加了一个链接。明白了!我犯了错误,我们都没抓住。它输入了Request,而您使用的是Response:)tsc
可以很好地处理您的repo中的这个更改:)错误现在确实消失了。我注意到了两件有趣的事情:在测试文件VS代码中仍然显示错误,如果我使用mocha+ts node using而不是jest,那么测试现在会由于编译器错误而失败。承诺使用摩卡咖啡:奇怪。Webstorm也显示了一个错误,但是Jest测试运行时没有任何问题!