2016-05-08 111 views
0

TSLint警告不要在TypeScript中使用var关键字,所以我在导入模块时一直使用import。但是,当我为本地模块执行此操作时,尝试使用该模块时会出现错误。在NodeJS中为模块使用导入导致类型错误

在文件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

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