expressjs: typescript: 类型'typeof <express.Router>'的参数不能分配给类型'RequestHandlerParams'的参数



我正在使用带有 https://github.com/DefinitelyTyped/DefinitelyTyped 的最新打字稿定义文件和打字稿 2.3.4 的 expressjs。 我定义了一个路由器,并希望按照官方 4.x 文档 (app.use('/calendar', router);中所述从子路径使用它,但我收到以下错误

Error: /Users/matthias/Documents/private workspace/universal/src/server/server.ts (161,34): Argument of type 'typeof "/Users/matthias/Documents/private workspace/universal/src/server/routes/login.router"' is not assignable to parameter of type 'RequestHandlerParams'.
Type 'typeof "/Users/matthias/Documents/private workspace/universal/src/server/routes/login.router"' is not assignable to type '(RequestHandler | ErrorRequestHandler)[]'.
Property 'length' is missing in type 'typeof "/Users/matthias/Documents/private workspace/universal/src/server/routes/login.router"'.

这是我正在使用的路由器,省略了实际代码...

const router : express.Router = express.Router();
let loginController = new LoginController();
router.post('/signin', function(req: express.Request, res: express.Response, next: express.NextFunction) {
...
})(req, res, next);
});
...
export default router;

。这是对它的调用的缩短版本。

import * as loginRouter from './routes/login.router';
private app = express();
this.app.use('/api/v1/auth', loginRouter);

我做错了什么,还是这个用例没有在打字稿定义文件中正确定义?

亲切问候

找到它,导入 * 作为...似乎丢失了其打字稿信息(IRouter,路由器(

解决方案是改用import loginRouter from './routes/login.router';

我通过删除来解决此问题

export default router;

在我的路由器模块的末尾。我只是将其导出到创建它的位置

export const router = express.Router();

然后相应地更新模块的任何导入。

我不知道为什么编译器在默认导出时遇到问题,但我知道 TypeScript 的默认导出与 ECMAScript 的默认导出并不相同。

我犯了愚蠢的错误,等了很长时间才检查解决方案

我正在使用app属性作为方法

app('/account', accountRoutes)

但我需要使用use()方法

app.use('/account', accountRoutes)

最新更新