Ok, așa că lasă-mă să încep prin a spune că „Modulul“ poate însemna lucruri diferite. De exemplu, există „modelul modulului“ care este ceea ce creează dvs. „MyModule“. În ceea ce am aduna, typescript se referă la acestea ca „Module interne“ în spec limbă, iar acestea diferă de la „Module externe“ pe care le-ar fi de încărcare cu ceva de genul RequireJS. Distincția principală este că modulele externe se așteaptă să aibă propriul lor mediu izolat cu un obiect predefinit „exporturi“, care le pot folosi pentru a exporta funcționalitatea lor.
Uitați-vă la ieșirea modulului dumneavoastră:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
Vezi că exportă lucruri în „MyModule“, care va fi disponibil la nivel global pentru alte script fișierele pe care le încărcați cu, de exemplu, un html „script“ bloc. Fiind că ați menționat aveți 60 dintre acestea, ai putea, probabil, de asemenea, seta compilator la ieșire un singur fișier pe care ați putea include în marcaj, în loc de încărcare fiecare fișier unul câte unul.
Trecând mai departe, să ia o privire la ceea ce se întâmplă la ieșire dacă vă schimbați declarația modulului dvs. de la „modulul MyModule {...}“ la „modul de export MyModule {...}“:
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
După cum vedeți, modulul este încă utilizați „modelul modulului“, dar acesta este atribuit ca membru al „exporturi“, ceea ce înseamnă că acesta este menit să fie încărcat cu, de exemplu, nod „necesită“ funcția.
În acest caz, v-ar dori să utilizați de fapt, modulul cu acest cod:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Notă „./MyModule“ numele de fapt , se referă la numele fișierului (minus extensia .js) , modulul este definit în (acesta este motivul pentru VS a fost spunând că nu a putut găsi acele module pentru tine). Codul ar trebui să compileze la ceva de genul:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Pentru a adăuga la acest lucru, nu mai chiar și într-adevăr nevoie de a face ceva cu „modul“ cuvânt cheie pentru a avea un modul. Ai putea exporta pur și simplu o funcție:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
Acest lucru funcționează pentru că funcția „foo“ vor fi atribuite în mod direct la „exporturi“, care va fi alias cu „înveliș“ în celălalt dosar.
Pentru a adăuga în continuare pe această mizerie confuz de lucruri legate de modul, ar trebui, de asemenea, menționez că modulele AMD sunt diferite în continuare, deoarece acestea sunt încărcate în mod asincron, spre deosebire de nod „necesită“. Pentru a ajunge la ieșire typescript cei pe care va trebui să treacă într-un parametru „--module AMD“ compilator.
Oricum, sper am explicat situația suficient de bine la punctul vei putea da seama ce anume ai nevoie / de cautare. Tipul de module va ajunge folosind va depinde într-adevăr de modul în care vei folosi ei ... adică, nod, web sau unele amestec de ambele.