Typescript: Déclarer la variable comme type de module externe sans importation

Créé le 8 sept. 2015  ·  3Commentaires  ·  Source: microsoft/TypeScript

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.

Question

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

Tous les 3 commentaires

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

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

MartynasZilinskas picture MartynasZilinskas  ·  3Commentaires

DanielRosenwasser picture DanielRosenwasser  ·  3Commentaires

seanzer picture seanzer  ·  3Commentaires

blendsdk picture blendsdk  ·  3Commentaires

bgrieder picture bgrieder  ·  3Commentaires