Итак, позвольте мне начать с того, что «Модуль» может означать разные вещи. Например, есть «модуль шаблон», который является то, что создает ваш «MyModule». Насколько я понимаю, машинопись относится к ним как «внутренние модули» в языке спецификации, и они отличаются от «внешних модулей», которые вы бы погрузка что-то вроде RequireJS. Главным отличием является то, что внешние модули рассчитывают иметь свою собственную изолированную среду с объектом предопределенный «экспорта», они могут использовать для экспорта их функциональности.
Посмотрите на выходе модуля:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
Вы видите, что она экспортирует вещи в «MyModule», которая будет сделана доступной во всем мире к другому скрипту файлов, загружать с, например, «сценарием» блоком HTML. Учитывая то, что вы упомянули, у вас есть 60 из них, вероятно, можно также установить компилятор для вывода одного файла, который вы могли бы включить в разметку, вместо загрузки каждому файлу один за другим.
Двигаясь дальше, посмотрим на то, что происходит на выходе, если вы измените свое объявление модуль из «модуля MyModule {...}» на «экспорт модуля MyModule {...}»:
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
Как вы видите, ваш модуль по-прежнему использует «шаблон модуля», но в настоящее время назначен в качестве члена «экспорта», что означает, что она предназначена для загрузки, например, узел «требуют» функции.
В этом случае, вы действительно хотите использовать модуль с этим кодом:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Обратите внимание , что название «./MyModule» на самом деле относится к имени файла (минус .js расширения) модуль определен в (поэтому VS говорил , что это не может найти эти модули для вас). Код должен составить что - то вроде:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Чтобы добавить к этому, вы больше не на самом деле даже не нужно ничего делать с «модулем» ключевым словом, чтобы иметь модуль. Вы можете просто экспортировать функцию:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
Это работает, потому что функция «Foo» будет непосредственно отнесено к «экспорту», который будет псевдонимы в «обертке» в другом файле.
Для того, чтобы добавить дальше на этом запутанном беспорядок модулей, связанные вещей, я должен также отметить, что модули AMD отличается еще потому, что они загружаются асинхронно, в отличие от узла «требует». Чтобы получить Машинопись для вывода этих вам нужно передать параметр «--module AMD» для компилятора.
Во всяком случае, я надеюсь, что я объяснил ситуацию достаточно хорошо, до точки, вы сможете понять, что именно вам нужно / хотят. Тип модулей, которые вы в конечном итоге с помощью действительно зависит от того, как вы будете использовать их ... то есть узел, веб, или какой-либо сочетание обоих.