Ok, así que vamos a empezar diciendo que "Módulo" puede significar cosas diferentes. Por ejemplo, no es el "patrón de módulo", que es lo que crea su "MyModule". Por lo que tengo entendido, mecanografiado se refiere a estos como "módulos internos" en la especificación del lenguaje, y éstos difieren de los módulos "externos" que usted estaría de carga con algo como RequireJS. La principal diferencia es que los módulos externos esperar a tener su propio entorno aislado con objeto A predefinidos 'exportaciones' que pueden utilizar para exportar su funcionalidad.
Echar un vistazo a la salida de su módulo:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
Ves que se está exportando las cosas en "MyModule" la cual se hará disponible a nivel mundial a otro script archivos que cargue con, por ejemplo, un bloque de html "guión". Siendo que usted ha mencionado que tiene 60 de estos, que probablemente podría también configurar el compilador para generar un archivo único que se podría incluir en el marcado, en lugar de cargar cada archivo uno por uno.
Cambiando de tema, echar un vistazo a lo que ocurre a la salida si cambia su declaración módulo de "MyModule módulo {...}" a "MyModule módulo de exportación {...}":
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
Como se ve, el módulo se sigue utilizando el "patrón de módulo" pero está siendo asignado a como miembro de "exportaciones", lo que significa que está destinado a ser cargado con, por ejemplo, el nodo de "requieren" función.
En este caso, se desea utilizar realmente su módulo con este código:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Tenga en cuenta el nombre de "./MyModule" en realidad se refiere al nombre de fichero (menos la extensión .js) del módulo se define en (esta es la razón por VS estaba diciendo que no pudo encontrar los módulos para usted). El código debe compilar a algo como:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
Para añadir a esto, ya no es siquiera realmente necesita hacer nada con la palabra clave "módulo" de tener un módulo. Simplemente podría exportar una función:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
Esto funciona porque la función de 'foo' será asignado directamente a las "exportaciones", que será alias de "contenedor" en el otro archivo.
Para añadir aún más confuso en este lío de cosas relacionados con el módulo, debería mencionar también que los módulos de AMD son diferentes, ya que todavía se cargan de forma asíncrona, a diferencia del nodo "requiere". Para llegar de transcripción de la salida de los que necesita para pasar de un parámetro "--module AMD" para el compilador.
De todos modos, espero que me explicó la situación lo suficientemente bien hasta el punto de que será capaz de averiguar qué es exactamente lo que necesita / quiere. El tipo de módulos que terminan usando realmente dependerá de cómo se va a utilizar ellos ... es decir, el nodo, tela, o alguna combinación de ambos.