Salut,
Est-il possible d'écrire un module externe (commonjs) "A", puis dans le code d'un autre module "B", déclarer une variable comme étant du type du module "A" sans utiliser l'importation qui finit par nécessiter le module "A".
La raison pour laquelle je veux faire cela est que je vais passer une référence au module "A" au constructeur d'une classe dans un autre module "B", parce que je veux que le module "A" soit un singleton. Mais je veux taper l'argument dans le constructeur à celui du module "A", comme si le module "A" avait été importé en utilisant import A = require ("A");
La raison pour laquelle je veux un module singleton est que ce module peut contenir des instances de classes qui gèrent les connexions de base de données, etc., et je ne veux pas vraiment qu'elles se réinitialisent à chaque fois que je dois importer; Je veux pouvoir les transmettre plutôt que de me fier à la magie potentielle du "cache de module de nœud".
Y a-t-il un moyen de faire cela? J'ai pensé à d'autres moyens de réaliser ce que je veux, mais cela me semble le plus simple, si c'est possible.
Les importations de modules sont éludées si elles ne sont pas utilisées dans une position de valeur. donc si votre importation du module A
n'est utilisée que dans une position de type, l'appel require
ne sera pas écrit.
par exemple:
// B.ts
import s = require("./A");
var x: typeof s;
émet
var x;
Est-ce que cela répond à votre question?
Oh c'est génial! Cela répond définitivement à ma question. Je n'ai pas trouvé cela dans la documentation, alors merci une tonne pour votre aide. :)
Salut les gens,
J'ai une question qui va dans le même sens. J'ai essayé la solution ci-dessus mais cela fonctionnait maintenant pour moi.
J'importe des classes depuis un module webpack parent import {A, B} depuis "parent";
Je veux simplement appeler le constructeur pour ces classes. J'ai essayé const a = A ({data: 1}); Cela ne donne aucune erreur TS lors de la compilation. Mais il rompt sur le javascript d'exécution en disant, l'erreur de type A n'est pas un constructeur.
Dois-je créer des types personnalisés et les ajouter dans devDependancies? Ou y a-t-il un moyen spécifique d'exporter mon module "parent" comme l'exportation par défaut.
Toute aide est appréciée.
Acclamations,
Sudeep
Commentaire le plus utile
Les importations de modules sont éludées si elles ne sont pas utilisées dans une position de valeur. donc si votre importation du module
A
n'est utilisée que dans une position de type, l'appelrequire
ne sera pas écrit.par exemple:
émet
Est-ce que cela répond à votre question?