gpt4 book ai didi

node.js - Node + Express 路由器 + 类型脚本 : string arg is not assignable to requesthandlerparams type

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:59 24 4
gpt4 key购买 nike

我正在按照教程创建一个完整的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com