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
设置吗?
答案 0 :(得分:1)
请勿使用var
您可以在routes / main.ts中将module.exports = router;
替换为export = router;
您误解了app.use
的用法。您应该使用app.use("/", routes)
。