我正在跟随一个tuto创建一个完整的rest api,然后,我创建一个TS类,该类导出一个新的express路由器:
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'
use语句为:
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
。