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

Ard*_*eal 6 javascript express typescript typescript-typings

我正在使用带有最新打字稿定义文件的expressjs和来自https://github.com/DefinitelyTyped/DefinitelyTyped的 typescript 2.3.4 .我定义了一个路由器,并希望从官方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"'.
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

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

import * as loginRouter from './routes/login.router';

private app = express();
this.app.use('/api/v1/auth', loginRouter);
Run Code Online (Sandbox Code Playgroud)

我做错了什么或者这个用例只是在typescript定义文件中没有正确定义?

亲切的问候

Ard*_*eal 11

发现它,导入*为...似乎失去了它的打字稿信息(IRouter,路由器)

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

  • 奇怪的是,我遇到了同样的问题,尽管我按照你的说法导入了它,但问题仍然存在 (2认同)