1

main.tsエントリポイントから実行されるbootstrapper.tsは、次のようになります(参照の見出しを除く)。

import Dialogs = App.Widgets.Dialogs;
declare var $ : JQueryStatic;


export class Bootstrapper { 
    static SiteLoad() { 
       var dialog = new Dialogs.LoginDialog();
       ...
    }
}

ただし、main.tsがこのファイルを読み込もうとすると、最初の行はすぐに参照エラーをスローします。defineそのとき、内部モジュールをインポートしても、生成された.jsファイルのラッパーに依存関係が追加されないことに気付きました。

では、実行時に内部モジュールを解決するにはどうすればよいですか?AMDは外部モジュールとのみ互換性があり、main.tsのエントリポイントに外部ライブラリと一緒に内部モジュールをロードする必要があるのですか?

私は外部モジュールよりも内部モジュールのエイリアス構文を好みます。上記のコードは、外部モジュール構文を使用する場合よりもはるかにきれいに見えます。

import Dialogs = module("Modules/App.Widgets.Dialogs");
declare var $ : JQueryStatic;


export class Bootstrapper { 
    static SiteLoad() { 
       var dialog = Dialogs.App.Widgets.Dialogs.LoginDialog(); //Seriously?
       ...
    }
}

それはただ醜いです。何をすべきか?

アップデート:

スティーブ、あなたが提案するアプローチには限界があります。内部モジュールを使用した元のアプローチでは、次のことができます。

import Dialogs = App.Widgets.Dialogs;

declare var $ : JQueryStatic;

export class Bootstrapper { 
    static SiteLoad() { 

        var loginDialog1 = new Dialogs.LoginDialog();  //Instantiation      -OK
        var loginDialog2: Dialogs.LoginDialog;         //Type-Declaration   -OK
    }
}

このアプローチでは、型宣言にエイリアスを使用する機能を失うことをお勧めします。

import DialogsModule =  module("Modules/App.Widgets.Dialogs");

var Dialogs : DialogsModule.App.Widgets.Dialogs;

declare var $ : JQueryStatic;

export class Bootstrapper { 
    static SiteLoad() { 

        var loginDialog1 = new Dialogs.LoginDialog();   //Instantiation  -OK        
        var loginDialog2: Dialogs.LoginDialog;  //Type-Declaration -ERROR: The name "Dialogs" does not exist in the current context  
        var loginDialog3: DialogsModule.App.Widgets.Dialogs.LoginDialog;  //Must use full name instead
    }
}
4

1 に答える 1

2

次のように、長いモジュールパスのエイリアスを作成できます。

import DialogModule = module("Modules/App.Widgets.Dialogs");
var dialogs = DialogModule.App.Widgets.Dialogs;
declare var $ : JQueryStatic;

export class Bootstrapper { 
    static SiteLoad() { 
       var dialog = dialogs.LoginDialog();
       ...
    }
}

適切なファイルを自分で含めることで、AMDとプレーンJavaScriptを組み合わせることができますが、プログラムで使用するパターンを1つ選択して、理解しやすくすることをお勧めします。

于 2013-01-21T09:30:46.267 に答える