我正在将基于 JS 的 express 应用程序重写为 Typescript。在重构路由器实例时,我偶然发现了以下问题:
this.router.get('/tenantInfo', (req, res) => {
res.send(this.getTentantInfo(req.tenant))
})
当我想将其转换为 Typescript 时,它看起来像这样:
import express, { Request, Response, Router } from 'express'
this.router.get('/tenantInfo', (req: Request, res: Response) => {
res.send(this.getTentantInfo(req.tenant))
})
导致 req.tenant
出错,因为 Request
没有这个属性。我搜索了 Stackoverflow 并找到了 this answer,但是,我认为如果我只是使用每个和 每个附加属性Request 接口,这不会导致良好的应用程序结构> 我希望在我的应用程序的各个地方。
以干净且可维护的方式解决此问题的好方法是什么?
答案 0 :(得分:0)
您可能需要在使用前检查 tenant
,例如:
this.router.get('/tenantInfo', (req: Request, res: Response) => {
if(req.tenant){
res.send(this.getTentantInfo(req.tenant))
}
res.send({
message: "Your error message..."
})
})
我不确定,但测试一下,看看它是否能解决您的问题
答案 1 :(得分:0)
这可能不会增加我的评论,但您也可以将 .d.ts
文件分隔到多个位置。假设你有这个目录结构
.
└── src
├── tenant
│ ├── request.d.ts
│ └── routes.ts
├── some
│ ├── interface.ts
│ ├── some.d.ts
│ └── routes.ts
├── other
│ └── ...
└── stuff
└── ...
在tenant/request.d.ts
declare namespace Express {
interface Request {
tenant?: string;
}
}
在some/interface.ts
export interface Some {
foo: string;
bar: string;
}
并在some/request.d.ts
import { Some } from "./interfaces";
declare namespace Express {
interface Request {
some?: Some;
}
}
同样适用于 other
和 stuff
...