extensión de Google Chrome - ¿Cómo puedo importar módulos AMD de TypeScript sin hacer que el código dependiente sea un módulo?
Tengo un script de contenido de una extensión de Chrome que tiene 2 dependencias AMD. El script funciona bien cuando cargo las dependencias usando la función "require" de requirejs.
He portado el script a TypeScript junto con el resto de mi proyecto, y ahora lo estoy usando
importar Dependencia=require("Dependencia");
lo cual está muy bien, los módulos han sido portados a TS y están funcionando bien en otras partes del proyecto.
Mi problema es que tan pronto como agrego una declaración de importación, el compilador de TS quiere convertir mi script en un módulo, y en el JS generado importa los módulos usando requirejs "define". A mi extensión de Chrome no le entusiasma mucho esto, y cuando la ejecuto obtengo un error de "define anónimo no coincidente".
¿Hay alguna manera de hacer que el compilador de TypeScript use la función require para cargar mis módulos en lugar de hacer que mi script sea un módulo? Estoy teniendo dificultad para encontrar algo sobre esto.
Respuesta #1
La mejor manera de manejar esto es en realidad compilar con la bandera commonjs y usar el hecho de que el compilador de TypeScript en realidad no emite declaraciones require si la importación del módulo no se usa en una posición de valor. Esto es similar al escenario avanzado de "carga opcional de módulos" documentado en la página Módulos en TypeScript.
Código de ejemplo:
declare var require: any; // If needed
import _a = require('Dependency');
import _b = require('SomeOtherDependency');
var a: typeof _a = require('Dependency');
var b: typeof _b = require('SomeOtherDependency');
// Use 'a' and 'b' in your code. Do not use _a or _b.
a.doSomething();
