Hola,
¿Es posible escribir un módulo externo (commonjs) "A", luego en el código de otro módulo "B", declarar una variable como tipo de módulo "A" sin usar la importación que termina requiriendo el módulo "A".
La razón por la que quiero hacer esto es que pasaré una referencia al módulo "A" al constructor de una clase en otro módulo "B", porque quiero que el módulo "A" sea un singleton. Pero quiero escribir el argumento en el constructor al del módulo "A", como si el módulo "A" se hubiera importado usando import A = require ("A");
La razón por la que quiero un módulo singleton es que este módulo puede contener instancias de clases que administran conexiones de bases de datos, etc., y realmente no quiero que se reinicialicen cada vez que tengo que importar; Quiero poder pasarlos en lugar de confiar en la magia potencial de "caché de módulo de nodo".
¿Hay alguna forma de hacer esto? He pensado en otras formas en las que puedo lograr lo que quiero, pero esta parece la más simple, si es posible.
Las importaciones de módulos se eliminan si no se utilizan en una posición de valor. por lo tanto, si su importación del módulo A
solo se usa en una posición de tipo, la llamada require
no se escribirá.
por ejemplo:
// B.ts
import s = require("./A");
var x: typeof s;
emite
var x;
¿Responde esto a tu pregunta?
¡Oh eso es genial! Definitivamente responde a mi pregunta. No pude encontrar esto en la documentación, así que muchas gracias por su ayuda. :)
Hola amigos,
Tengo una pregunta que está en la misma línea. Probé la solución anterior pero ahora funcionó para mí.
Estoy importando clases desde un módulo webpack parent import {A, B} from "parent";
Simplemente quiero llamar al constructor para estas clases. Intenté const a = A ({data: 1}); Esto no da ningún error de TS en la compilación. Pero se rompe en JavaScript en tiempo de ejecución diciendo: El error de tipo A no es un constructor.
¿Necesito crear tipos personalizados y agregarlos en devDependancies? ¿O hay una forma específica de exportar mi módulo "principal" como exportar por defecto?
Se agradece cualquier ayuda.
Salud,
Sudeep
Comentario más útil
Las importaciones de módulos se eliminan si no se utilizan en una posición de valor. por lo tanto, si su importación del módulo
A
solo se usa en una posición de tipo, la llamadarequire
no se escribirá.por ejemplo:
emite
¿Responde esto a tu pregunta?