[英]TYPESCRIPT : Argument of type 'typeof X' is not assignable to parameter of type 'Y' with extends
[英]expressjs: typescript: Argument of type 'typeof <express.Router>' is not assignable to parameter of type 'RequestHandlerParams'
我正在使用 expressjs 和来自https://github.com/DefinitelyTyped/DefinitelyTyped的最新打字稿定义文件和打字稿 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"'.
这是我正在使用的路由器,省略了实际代码...
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);
我做错了什么还是这个用例只是在打字稿定义文件中没有正确定义?
亲切的问候
找到了,import * as ... 好像丢了打字稿信息(IRouter,Router)
解决方案是使用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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.