Typescript: Declarar variable como tipo de módulo externo sin importar

Creado en 8 sept. 2015  ·  3Comentarios  ·  Fuente: microsoft/TypeScript

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.

Question

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 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?

Todos 3 comentarios

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

¿Fue útil esta página
0 / 5 - 0 calificaciones