2016-08-24 65 views
3

說我有一個nodejs模塊,當我需要它時,它會向我返回一個構造函數。像下面這樣:導出整個模塊作爲構造函數

var Mod = require("modulename"); 
var mod = new Mod(); 
mod.method(); 

我想寫可以導入和使用像這樣一個.d.ts聲明文件:我已經試過閱讀打字稿所有文件

import * as Mod from "mod"; 
let mod = new Mod(); 
mod.method(); 

網站,但它真的很清晰,我覺得我已經嘗試過我的.d.ts文件中存在的類,接口,名稱空間,模塊和導出的各種組合。我想知道以上是否可以實現。任何人都可以提供任何幫助嗎?

回答

4

而是寫這

import * as Mod from "mod"; 
let mod = new Mod(); 

你應該寫這個

import Mod = require("mod"); 
let mod = new Mod(); 

爲什麼?

import * as Mod from "mod"; 

這是ES6模塊導入語法。它表示您將"mod"模塊對象導入本地名稱Mod。 ES6模塊僅公開屬性,不能作爲函數或new調用。

我會再說一次,因爲人們經常不相信我或選擇忽略它:ES6模塊僅公開屬性,並且不能作爲函數或與new一起調用。

如果您開始將代碼編譯到ES6運行時(而不是使用CJS/AMD降級到ES5模塊),您的代碼將停止工作。雖然在ES6模塊中沒有require函數,所以「舊式」import Mod = require("mod");仍然可以。

+0

好的,謝謝,我會去修改我的.d.ts文件,嘗試使用這種導入方式使其工作。是獲得ES6模塊導入語法工作的唯一方法,然後,要求原始模塊作者(而不是我)重寫將構造函數作爲屬性而不是直接顯示? –