Ok, takže dovolte mi začít tím, že říká, že „Module“ může znamenat různé věci. Například, tam je „modul vzor“, což je to, co vaše „MyModule“ vytváří. Co se týče Soudím, strojopisem odkazuje na tyto jako „vnitřní moduly“ v jazykové specifikace, a se liší od „externích modulů“, které by se načítají se něco podobného RequireJS. Hlavním rozdílem je, že externí moduly očekávat, že mají svůj vlastní izolované prostředí s objektem předdefinovaného ‚vývoz‘, které lze použít pro export jejich funkčnost.
Podívejte se na výstupu z vašeho modulu:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
Vidíte, že je export věci do „MyModule“, která bude provedena po celém světě k dispozici na jiné soubory skriptů načíst s, například html „script“ bloku. V tom, že jste se zmínil, máte 60 z nich by pravděpodobně mohlo také nastavit kompilátor výstup jeden soubor, který by mohl zahrnovat značkování, místo nakládky každý soubor jeden po druhém.
Pohybující se, podívejte se na to, co se děje na výstupu, pokud změníte deklarace modulu z „modulu MyModule {...}“ na „export modulu MyModule {...}“:
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
Jak vidíte, váš modul je stále pomocí „modulu vzor“, ale to je přiřazen jako člen „vývoz“, znamenat, že to má být naplněn, například uzel je „potřebují“ funkci.
V takovém případě byste měli chtít, aby skutečně používat modul s tímto kódem:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Všimněte si „./MyModule“ name vlastně odkazuje k souboru (mínus JS rozšíření) modul je definován v (to je důvod, proč se říká, že VS nemohl najít ty moduly pro vás). Kód by měl sestavit něco jako:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Chcete-li přidat k tomu, že již není ani opravdu potřeba udělat něco s „modul“ klíčové slovo mít modul. Dalo by se jednoduše exportovat funkce:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
Tato metoda funguje, protože funkce ‚foo‘ budou přímo přiřazeny k „vývoz“, které budou aliasy na „wrapper“ v druhém souboru.
Chcete-li přidat další do této matoucí nepořádek věcí souvisejících modulů, měl bych také zmínit, že AMD moduly jsou odlišné stále, protože jsou načítány asynchronně, na rozdíl od uzel je „potřebují“. Chcete-li získat strojopis na výstupu ty budete muset projít v parametru „--module AMD“ do překladače.
Každopádně doufám, vysvětlil jsem situaci dost dobře do té míry, budete moci zjistit, co přesně budete potřebovat / chtít. Typ modulů budete skončit s použitím bude opravdu záležet na tom, jak budete jejich používání ... tj uzel, web, nebo nějakou kombinaci obou.