我正在按照教程创建一个完整的 REST API,然后,我创建一个导出新的 Express 路由器的 TS 类:
import { Router, Request, Response, NextFunction } from 'express';
export class TourRouter {
public router: Router;
constructor() {
this.router = Router();
this.init();
}
public init(): void {
this.router.get(
'/',
this.getTours
);
}
private getTours(request: Request, response: Response, next: NextFunction) {
// Some JSON
const tours = {
"now": "2018-09-09 18:40:00",
"date": "2018-09-09",
"tours": [
{
"time": "8",
"places": 8,
"isPast": false
},
{
"time": "11",
"places": 8,
"isPast": false
},
{
"time": "14",
"places": 8,
"isPast": false
},
{
"time": "17",
"places": 8,
"isPast": false
}
]
};
response.send(tours);
}
}
const tourRoutes = new TourRouter();
tourRoutes.init();
export default tourRoutes.router;
当我想在我的 App.ts 中使用这个新路由器时,如下所示,我收到 TS 错误,并且构建失败并显示以下消息:
Argument of type 'string' is not assignable to parameter of type 'RequestHandlerParams'
使用声明是:
private _routes(): void {
let router = express.Router();
router.get('/', (request, response, next) => {
response.json({
message: 'Hello World'
});
});
this.express.use('/', router);
this.express.use('/api/v1/tours', TourRouter);
}
就我而言,好像 TourRouter 不是我所期望的路由器,而是其他东西,但不知道为什么。我缺少什么?
问候
最佳答案
听起来您正在导入 TourRouter
类而不是实际的路由器,这是默认导出。将 import { TourRouter } from './routes/TourRouter';
替换为 import TourRouter from './routes/TourRouter';
。您可能希望使用 TourRouter
以外的名称导入路由器以避免混淆。
TypeScript 知道您传递给 this.express.use
的参数与任何有效的重载签名都不匹配,但它不知道您打算使用哪个重载签名。它(错误地)猜测了 (...handlers: RequestHandlerParams[]) => T
签名,这解释了字符串路径无法分配给 RequestHandlerParams
的奇怪错误。
关于node.js - Node + Express 路由器 + 类型脚本 : string arg is not assignable to requesthandlerparams type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52329090/