1

私は TypeScript と Dojo を並行して学習していますが、これにより、AMD に関する私の限られた理解が明らかになりました。import ステートメントをサードパーティの「dgrid/Grid」AMD モジュール、dgrid.d.ts スタブ宣言、および消費クラスに結び付ける方法がわかりません。2日間の無駄な努力の後、次のことを実行するための手段(ハッキーまたはAMDのベストプラクティス)を探しています:

MyModule.ts

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

dgrid のスタブ宣言ファイルは次のとおりです。

dgrid.d.ts (以下の Update 1 と同期するように編集)

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

使用する TypeScript クラスで次の参照を試しましたが、Visual Studio は「dgrid/Grid」リテラルに赤で下線を引いています。これは、TS コンパイラーが default.htm ファイル内の従来の Dojo dojoConfig、baseUrl、および dgrid パッケージ宣言を認識していないと思われるためです。

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

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

module MyModule
{
   ...
}

更新 1 投稿以来、公式の TypeScript マニュアルの第 10 章を読みました。以前は、module MyType{} または module "external/ thirdparty" {} として宣言されたモジュールの重要性を認識できていませんでした。外部モジュールのアンビエント宣言はリテラルである必要があります。

バックグラウンド:

Require ステートメント:

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

2 に答える 2

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をスコープに入れます。型名の前にモジュールの名前を付けると、うまくいきます。

于 2012-10-11T14:45:18.347 に答える
0

私の最初のことは、このステートメントが機能すると思われる場所にファイルがあることを確認することです。

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

ファイルはdgrid.d.tsモジュールの .ts ファイルと同じフォルダーにありますか?

アップデート:

モジュール宣言は次のようにする必要があります。

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

        }
    }
}
于 2012-10-11T13:52:32.690 に答える