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
}
}