Ok, więc pozwól mi zacząć od stwierdzenia, że „Module” może oznaczać różne rzeczy. Na przykład, nie jest „moduł wzór”, który jest jaki jest twój „mymodule” tworzy. O ile mi zebrać, maszynopis odnosi się do nich jako „Moduły Wewnętrznych” w specyfikacji języka, a różnią się one od „zewnętrznych modułów”, które można byłoby loading z czymś RequireJS. Główna różnica jest taka, że moduły zewnętrzne oczekiwać, aby mieć swój własny odizolowane środowisko z obiektu predefiniowanego „eksportu” mogą wykorzystać do eksportowania ich funkcjonalność.
Spójrz na wyjściu modułu:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
Widać, że eksportuje rzeczy do „mymodule”, które zostaną wykonane globalnie dostępny do innego skryptu załadować pliki z, na przykład, html „skrypt” bloku. Jako, że wspomniałeś masz 60 z nich, prawdopodobnie można również ustawić kompilator wyjściu pojedynczy plik, który mógłby zawrzeć w znacznikach, zamiast ładowania każdy plik pojedynczo.
Idąc dalej, spójrz na to, co dzieje się na wyjściu jeśli zmienisz swoją deklarację z modułu „moduł mymodule {...}” do „modułu eksportu mymodule {...}”:
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
Jak widać, Twój moduł jest nadal za pomocą modułu „wzór”, ale jest on przypisany jako członek „eksportu”, co oznacza, że ma być załadowany, na przykład, węzła „wymagają” funkcję.
W tym przypadku, co chcesz rzeczywiście korzystać z modułu z tym kodem:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Zauważ, że „./MyModule” Nazwa rzeczywiście odnosi się do nazwy pliku (minus rozszerzeniem .js) moduł jest zdefiniowany w (dlatego VS mówił, że nie mógł znaleźć te moduły dla Ciebie). Kod powinien skompilować do czegoś takiego:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Aby dodać do tego, nie ma już nawet naprawdę trzeba zrobić coś z „modułem” słowo kluczowe aby mieć moduł. można po prostu wyeksportować funkcję:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
To działa, ponieważ funkcja „foo” zostanie bezpośrednio przypisane do „eksportu”, która będzie aliasem „wrapper” w innym pliku.
Aby dodać dodatkowo na ten zagmatwany bałagan modułów związanych z rzeczy, należy również wspomnieć, że moduły AMD nadal są różne, ponieważ są one ładowane asynchronicznie, w odróżnieniu od węzła „wymagać”. Aby dostać się do wyjścia maszynopis te trzeba przekazać w parametrze „--module AMD” do kompilatora.
W każdym razie, mam nadzieję, że wyjaśniłem sytuację na tyle dobrze, do tego stopnia, że będziesz w stanie dowiedzieć się, co dokładnie trzeba / chcesz. Typ modułów skończyć się przy użyciu naprawdę zależy od tego jak będziesz używać ich ... tzn, węzeł sieci, lub jakąś mieszankę obu.