Ok, quindi mi permetta di cominciare dicendo che "Modulo" può significare cose diverse. Ad esempio, c'è il "modello di modulo", che è ciò che crea la vostra "MyModule". Per quanto ho capito, dattiloscritto si riferisce a questi come "moduli interni" nella specifica lingua, e queste differiscono da "Moduli esterni" che si sarebbe di carico con qualcosa di simile RequireJS. La distinzione principale è che i moduli esterni si aspettano di avere il proprio ambiente isolato con oggetto un predefiniti 'esportazioni' che possono utilizzare per esportare la loro funzionalità.
Date un'occhiata a l'uscita del modulo:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
Si vede che si sta esportando le cose in "MyModule", che saranno messi a disposizione a livello globale per altro script file che si carica con, ad esempio, un blocco HTML "script". Essendo che lei ha detto di avere 60 di questi, probabilmente si potrebbe anche impostare il compilatore per produrre un unico file che è possibile includere nel markup, invece di caricare ogni file uno per uno.
Passando, dare un'occhiata a ciò che accade per l'uscita se si modifica la dichiarazione del modulo da "modulo MyModule {...}" a "modulo di esportazione MyModule {...}":
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
Come si vede, il modulo è ancora utilizzando il "modello di modulo" ma viene assegnato a come membro del "esporta", a significare che è destinato a essere caricato con, per esempio, il nodo del "richiedono" la funzione.
In questo caso, si vorrebbe utilizzare effettivamente il modulo con questo codice:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Si noti il nome "./MyModule" si riferisce in realtà al nome del file (meno l'estensione .js) il modulo è definito in (questo è il motivo per cui VS stava dicendo che non riusciva a trovare i moduli per voi). Il codice dovrebbe compilare a qualcosa di simile:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Per aggiungere a questo, non è più nemmeno realmente bisogno di fare qualcosa con la parola chiave "modulo" per avere un modulo. Si potrebbe semplicemente esportare una funzione:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
Questo funziona perché la funzione di 'foo' verrà assegnato direttamente a "esportazioni", che sarà alias di "wrapper" nell'altro file.
Per aggiungere ulteriore su questo pasticcio confuso di cose legate modulo, Vorrei anche ricordare che i moduli di AMD sono diverse ancora perché sono caricati in modo asincrono, a differenza del nodo "richiedono". Per arrivare a dattiloscritto uscita quelli è necessario passare un parametro "--module AMD" per il compilatore.
Comunque, spero che ho spiegato la situazione abbastanza bene fino al punto che sarete in grado di capire che cosa esattamente avete bisogno / voglia. Il tipo di moduli si finisce per utilizzare realmente dipenderà da come userete loro ... cioè, nodo, web, o qualche combinazione di entrambi.