Мой bootstrapper.ts, который запускается из точки входа main.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
}
}