Ok, alors laissez-moi commencer par dire que « module » peut signifier des choses différentes. Par exemple, il y a le « motif de module » qui est ce que votre « MyModule » crée. Pour autant que je crois, tapuscrit fait référence à ces « modules internes » dans la spécification du langage, et ceux-ci diffèrent de « Modules externes » que vous chargerait avec quelque chose comme RequireJS. La principale distinction est que les modules externes attendent d'avoir leur propre environnement isolé avec l'objet 'exportations prédéfinies qu'ils peuvent utiliser pour exporter leur fonctionnalité.
Jetez un oeil à la sortie de votre module:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
Vous voyez qu'il exporte les choses dans « MyModule » qui sera mis à la disposition d'autres à l'échelle mondiale script chargement des fichiers, par exemple, un bloc « script » html. Etant donné que vous avez mentionné que vous avez 60 d'entre eux, vous pouvez probablement mettre aussi le compilateur pour produire un seul fichier que vous pouvez inclure dans le balisage, au lieu de charger chaque fichier un par un.
Sur la route, jetez un oeil à ce qui se passe à la sortie si vous changez votre déclaration de module de « module MyModule {...} » à « module d'exportation MyModule {...} »:
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
Comme vous le voyez, votre module utilise toujours le « modèle du module », mais il est affecté en tant que membre des « exportations », ce qui signifie qu'il est destiné à être chargé, par exemple, la fonction « exigent » du noeud.
Dans ce cas, vous voulez réellement utiliser votre module avec ce code:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Notez le nom « ./MyModule » fait référence au nom de fichier (moins l'extension .js) , le module est défini dans (ce qui est la raison pour laquelle VS a dit qu'il ne pouvait pas trouver ces modules pour vous). Le code devrait compiler à quelque chose comme:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Pour ajouter à cela, vous ne avez plus besoin même vraiment rien à faire avec le mot-clé « module » pour un module. Vous pouvez simplement exporter une fonction:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
Cela fonctionne parce que sera directement attribué « foo » la fonction de « exportations » qui sera à Aliased « wrapper » dans l'autre dossier.
Pour ajouter plus loin sur ce gâchis confus de choses liées à module, je dois aussi mentionner que les modules AMD sont différents encore parce qu'ils sont chargés de manière asynchrone, contrairement à noeud « exigent » de. Pour obtenir tapuscrit à la sortie ceux que vous aurez besoin de passer dans un paramètre « --module AMD » au compilateur.
Quoi qu'il en soit, je l'espère, j'ai expliqué la situation assez au point que vous serez en mesure de comprendre exactement ce dont vous avez besoin / besoin. Le type de modules que vous retrouvez à l'aide vraiment dépendra de la façon dont vous allez les utiliser ... par exemple, noeud, web, ou un mélange des deux.