在NodeJS中使用导入模块会导致类型错误

时间:2016-05-08 00:55:10

标签: typescript

TSLint警告不要在TypeScript中使用var关键字,因此我在导入模块时一直使用import。但是,当我为本地模块执行此操作时,当我尝试使用该模块时,它会给我一个错误。

在文件routes/main.ts中,我有:

import express = require("express");
let router = express.Router();
router.get("/", (req, res, next) => { ... });

module.exports = router;

app.ts我有:

/// <reference path="../../typings/main.d.ts" />
import express = require("express");
...
import routes = require("./routes/main");
let app = express();
app.use(routes); // The type error is here.
...

当我使用import routes时,使用app.use(routes);会导致以下类型错误:

app.ts(36,13): error TS2345: Argument of type 'typeof ".../source/server...'
is not assignable to parameter of type 'RegExp'.

要解决此问题,我可以将其转换为特定类型:

app.use(<express.Router>routes);

但是有些地方的类型铸造并不那么干净。我可以在导入模块时切换到使用var关键字:

var routes = require("./routes/main");
let app = express();
app.use(routes); // No errors.

但有没有办法满足编译器和tslint?或者,在使用CommonJS模块样式时,我不应该使用tslint中的"no-var-requires": true设置吗?

1 个答案:

答案 0 :(得分:1)

请勿使用var 您可以在routes / main.ts中将module.exports = router;替换为export = router; 您误解了app.use的用法。您应该使用app.use("/", routes)