2016-05-08 133 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)