2017-02-17 214 views
0

https://github.com/mgumerov/angular「文件是不是一個模塊」關於JS模塊聲明

請看看SRC /模擬數據/模擬data.js - 這是大,但是很簡單。

System.register([], function (exports) { 
    mockdata = {......}; 
    exports("MockData", mockdata); 
}); 

我選擇使用它在我的TS模塊的src /應用/表view.ts:

import { MockData } from 'mockdata/mock-data'; 

但TSC給了我一個錯誤消息,因爲在隱含導入JS模塊結果「任何'對象,除非模塊具有方便的TS類型聲明。而且,正如Angular 2 quickstart所建議的那樣,「隱含的任何」都被視爲錯誤。

我最初的衝動是使用require()來導入模塊,而不是像某些源代碼提出的那樣。但是,這導致錯誤「無法找到名稱:要求」。

好吧,讓我們提供一個聲明:SRC /模擬數據/模擬data.d.ts

declare module 'MockData' { 
    var mockdata: any; 
    export = mockdata; 
} 

它看起來完全像其他類似的聲明(https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/adal/index.d.ts),當然除了這是因爲很簡單我只聲明一個單一的無類型對象。也許我甚至不這樣做,但那不是全部!問題是,TSC現在說TS2306:文件... mock-data.d.ts不是一個模塊!甚至當我試圖用前面提到的文件(來自DefinitelyTyped)替換文件時,該消息保持不變。到底是怎麼回事?

我在哪裏可以找到如何在TS中使用JS模塊的正確解釋?一個沒有類,沒有接口,只有一個對象的模塊?

+0

在這種情況下,「消耗」是什麼意思? – evolutionxbox

+0

嗯,我試圖從模塊內部導入一個對象,然後從該對象的屬性中提取一些數據片段到一個新創建的類型化對象數組中。毫無疑問,我可以用其他方式完成它,比如閱讀JSON,但是我想知道爲什麼我目前的方法不起作用。 –

回答

0

這裏是正確的聲明:

export const MockData: any; 

這就是全部的模擬data.d.ts 的MockData這裏是接下來的出口在我的模擬data.js作出標識

這是從https://www.typescriptlang.org/docs/handbook/modules.html設計 - 不幸的是提示是隱藏在「UMD模塊」部分,因爲在其他例子中存在「聲明」的東西,在我的情況下是不需要的。