2014-10-31 48 views
3

我正在使用typescript開發NPM包。在這個包內,TS文件被設置爲外部模塊。編譯器不會爲外部模塊生成一個.d.ts。我試圖將所有tsc生成的類型定義連接到整個包的單個.d.ts文件中。使用外部模塊創建單個.d.ts問題

我在佈置單個.d.ts文件時遇到了問題(遵循類似於grunt-dts-bundle中使用的方法)。下面的濃縮示例捕捉了我的問題。

鑑於這種外部模塊聲明和測試文件:

test.d.ts

declare module "ExternalWrapper" { 
    export import Foo = require("FooModule"); 
} 

declare module "FooModule" { 
    class Foo { 
     name: string; 
    } 
    export = Foo; 
} 

test.ts

import externalWrapper = require('ExternalWrapper'); 
var t = new externalWrapper.Foo(); 

運行tsc test.ts test.d.ts -m commonjs產生這個錯誤:TS2083: Invalid 'new' expression.

如果你改變了「test.ts」看起來像這樣,導入「FooModule」直接:

import Foo = require("FooModule"); 
var t = new Foo(); 

它編譯罰款。

編譯器理解externalWrapper.Foo類型,但它似乎並不表示它是FooModule.Foo。我沒有得到關於編譯器如何處理通過「導出導入」導出的模塊的信息。

未按上述我可能會看向手動創建.d.ts :(

任何幫助表示讚賞。

回答

2

你可能缺少一個reference標籤:

/// <reference path="test.d.ts"/> 

它的工作原理:

enter image description here

+0

歡呼聲,原來如此。我已經看到你的問題在外部模塊.d.ts幾代以上的打字稿問題列表,希望這會消失,如果得到實施:) – Keith 2014-11-18 17:20:48

2

您應該能夠通過修改.d.ts文件來解決這個問題類似於以下內容:。

declare module "ExternalWrapper" { 
    import FooModule = require("FooModule"); 
    export var Foo: typeof FooModule; 
} 

declare module "FooModule" { 
    class Foo { 
     name: string; 
    } 
    export = Foo; 
} 

隨着export import語法編譯器是假設你是出口美孚的一個實例,而不是foo本身......有點古怪