2012-10-11 45 views
1

我正在並行學習TypeScript和Dojo,這暴露了我對AMD的有限理解。我不明白如何將導入聲明與第三方「dgrid/Grid」AMD模塊,我的dgrid.d.ts存根聲明和我的消費類綁定在一起。之後無用功2天我在尋找任何方式(哈克或AMD的最佳做法)執行以下操作:從TypeScript中引用dgrid的導入語法

MyModule.ts

{ 
    ... 
    var myGrid = new dgrid.Grid({ /*col structure*/}, "divId"); 
    ... 
} 

這裏是我的dgrid存根聲明文件。

dgrid.d.ts紅色(編輯下面更新1同步)

module "dgrid/Grid" 
{ 
    export class Grid 
    { 
     constructor (gridStructure: any, elementId: string); 
    } 
} 

我想在我的消費類打字稿下面的參考,但Visual Studio中強調了「dgrid /網格」字面因爲我猜測TS編譯器並不知道default.htm文件中的經典Dojo dojoConfig,baseUrl和dgrid包聲明。

///<reference path='dgrid.d.ts' /> 

import Grid = module("dgrid/Grid"); 

module MyModule 
{ 
    ... 
} 

更新1 發佈以來,通過我在正式打字手冊第10章讀取。以前,我沒有認識到聲明爲模塊MyType {}或模塊「external/thirdparty」{}的模塊的重要性。外部模塊的環境聲明應該是文字。

背景:

裝0

要求聲明:

require(["dgrid/Grid", "dojo/domReady!"], 
    function(Grid){ 
+0

尚無工作解決方案。我還沒有放棄這個問題,TypeScript導入語句正在生成AMD樣式的模塊代碼加載代碼,但它並未將加載的模塊實現爲新的(abe)類型。我看到整個模塊名稱空間位於原型之下。我會發布另一個SO問題來解決這個問題。 – camelCase

+0

好的。你能在這裏發佈一個關於這個問題的鏈接嗎? – Valentin

回答

0

我的第一個雖然是檢查該文件中的位置,你認爲這是對這種說法的工作:

///<reference path='dgrid.d.ts' /> 

是在dgrid.d.ts文件中的與您的模塊.ts文件相同的文件夾?

更新:

如果您模塊的聲明是:

module dgrid { 
    export class Grid { 
     constructor (gridStructure: any, elementId: string) { 

     } 
    } 
} 
+0

是的,我所有的.ts和.d.ts文件都在同一個目錄下,並感謝對我的操作系統的編輯。在我的OP中的「Update 1」之後,編譯器正在生成var Dgrid = require(「dgrid/Grid」),但現在當require()執行時,我得到一個運行時Dojo異常。編譯器也會退出VS2012視爲錯誤的代碼「9009」。 – camelCase

+0

我也爲您的模塊添加了更改。 – Fenton

+0

@self 9009編譯器退出代碼是因爲我在.csproj中手動編輯了tcs命令是錯誤的。項目文件中表達的編譯器「amd」選項對位置和間距很敏感。這適用於TypeScript \ 0.8.0.0 \ tsc " --module amd @(TypeScriptCompile – camelCase

1

代碼的下面(略有改變)版本對我來說編譯罰款:

MyModule的。TS

///<reference path='./dgrid.d.ts' /> 
module MyModule { 
    var gridInstance : dgrid.Grid = new dgrid.Grid("test1", "test2"); 
} 

dgrid.d.ts

module dgrid 
{ 
    class Grid 
    { 
     constructor (gridStructure: any, elementId: string); 
    } 

} 

///<reference path='...'/>該構建體所帶來的內部模塊dgrid成範圍。在模塊名稱前加上類型名稱即可完成這項工作。