2016-01-26 57 views

回答

47

找到了我一直在尋找:

申報與無功

var創建一個新的變量。 declare用於告訴TypeScript該變量已在別處創建。如果使用declare,則不會在生成的JavaScript中添加任何東西 - 這只是編譯器的一個提示。

例如,如果您使用定義var externalModule外部腳本,你會用declare var externalModule暗示到externalModule已經建立

+0

我有一個類似的場景,外部JS定義了一個變量'externalModule'等等。可能是爲什麼'externalModule'在運行時未定義的原因,但其他一些變量不是? –

19

要理解這一點的打字稿編譯器,你必須先了解「聲明「關鍵字。

這裏是Gil Fink's Blog一個很好的解釋:

打字稿聲明關鍵字來聲明,可能沒有源自打字稿文件變量。

例如,讓我們想象一下,我們有一個庫調用在MyLibrary不具有打字稿聲明文件,並在全局命名空間命名空間被稱爲在MyLibrary。如果你想使用該庫在您的打字稿的代碼,你可以使用下面的代碼:

declare var myLibrary; 

的打字稿運行時將給予在MyLibrary變量的類型是任何類型的。這裏的問題是,在設計時您不會爲該變量設置Intellisense,但是您可以在代碼中使用該庫。爲具有相同的行爲,而不使用DECLARE關鍵字另一種選擇是隻使用一個變量與任何類型的:

var myLibrary: any; 

兩者的代碼示例將導致相同的JavaScript輸出,但聲明的例子是更可讀的,並表示一個環境聲明。


所以,你明白了「聲明」關鍵字後,返回到哪裏找到

export declare class Action{ 
... 
} 

類的真正實現是可能在別的地方也許— .js文件。