convert - ¿Cómo puedo importar un módulo AMD de JavaScript en un módulo externo de TypeScript?
typescript require (1)
¿Cómo puedo ahora modificar main.ts para que pueda cargar y usar este módulo log.js AMD?
Si solo está disponible el archivo log.js, puede indicar mecanografía sobre la información de tipo del log
utilizando declare
es decir, crear un log.d.ts
:
declare module ''log''{
export function message(s:string);
}
Y luego usarlo desde main.ts como:
/// <reference path=''log.d.ts''/>
import log = require(''log'');
log.message("hello");
¿Cómo puedo importar un módulo AMD de JavaScript en un módulo externo de TypeScript?
Estoy modularizando mi programa de cliente de TypeScript para usar los módulos de AMD administrados por bower. Como parte de este proceso, un módulo de Typescript se convierte en un módulo de JavaScript AMD, que luego publico. Ahora tengo un módulo de AMD de javascript que quiero incluir en un módulo de TypeScript, y no quiero publicar el TypeScript original con el AMD de JavaScript.
No puedo descifrar cómo escribir mi código TypeScript para que cargue un módulo AMD de JavaScript para el que no existe un TypeScript correspondiente, y parece que las versiones más recientes de TypeScript aún no lo admiten.
Si comienzo con el ejemplo de la especificación 0.9.7 TypeScript, sección 11.2:
Archivo main.ts:
import log = require("./log");
log.message("hello");
Archivo log.ts:
export function message(s: string) {
console.log(s);
}
Creo que debería poder modificar main.ts para que el compilador resuelva la referencia de "registro" al módulo AMD de log.js. A continuación se muestra el archivo log.js que se produjo ejecutando tsc --module amd main.ts. Es un módulo correcto de AMD.
Archivo log.js:
define(["require", "exports"], function(require, exports) {
function message(s) {
console.log(s);
}
exports.message = message;
});
Para simular tener un módulo AMD de JavaScript, compile el ejemplo anterior y luego elimine el archivo log.ts. Si ahora intenta compilar utilizando el mismo comando, falla con los siguientes errores:
./main.ts(1,1): error TS2071: Unable to resolve external module ''"./log"''.
./main.ts(1,1): error TS2072: Module cannot be aliased to a non-module type.
¿Cómo puedo ahora modificar main.ts para que compile y resuelva contra este módulo AMD de log.js? Puedo escribir el archivo log.d.ts si es necesario, pero me gustaría un método que también funcione sin un archivo de declaración.
Si puedo aprender cómo hacer esto en el estilo canónico de TypeScript, entonces puedo continuar la modularización completa de mi proyecto.