2017-04-27 105 views
1

我有一個TypeScript文件foo.d.ts.它包含了很多的「申報模塊」結構,僅此而已:只從「聲明模塊」頂級聲明中導入TypeScripd聲明文件的內容

declare module Foo { 
} 

declare module Fun { 
} 

的代碼自動生成由Bridge.NET,所以我不能修改它(我可以,其實但它不是。一個好看的解決方案)。

如果該文件在另一個引用import * as bridge from "./foo"; tsc說「文件foo.d.ts不是一個模塊」。我做錯了什麼?

如果我編輯生成的文件(foo.d.ts)並將其添加到虛擬頂級導出(export interface Fix {})的末尾,問題就會消失。

回答

3

你得到的錯誤的原因是你的foo.d.ts實際上不是一個模塊,它是一個腳本。但導入聲明應該僅用於模塊。當您添加export interface Fix {}時,會將該文件轉換爲模塊,這就是錯誤消失的原因。

公共規則是非常簡單的,打字稿編譯器將一個文件作爲一個模塊,如果有含出口改性劑的至少一個頂級實體(類/接口/可變..)。否則,文件將像腳本一樣被處理。

如果你真的不需要foo.d.ts是一個模塊,你可以使用下面的指令來引用它。在這種情況下,文件中聲明的所有實體將全局可用。

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