microsoft / microsoft/TypeScript

The module namespace object returned by __importStar is not the same when import the same module multiple times

Ouverte
#63,391 2 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Domain: JS Emit
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

🔎 Search Terms
  • __importStar
  • module object
  • namespace object
🕗 Version & Regression Information
  • Version: 6.0.2
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about "namespace import". I did not found any information related to this.
⏯ Playground Link

https://www.typescriptlang.org/play/?target=99&jsx=0&module=1&ts=6.0.2#code/DYUwLgBADgjBC8ECWBbKB7ATmAFAIgDMBnPASgG4BYAKFEigCYFk0tdCSKaaAFTdFEiIgAdAENgwHAG1YAGmgMAuqRFgAFiAB2OGcRgLiy0ggB8EAN40INiAGN0WoulAjg6AOY59CeIiMUEAD0QRBgmACuIDQAvlzUQA

💻 Code
let p1 = import("fs");
let p2 = import("fs");

Promise.all([p1, p2]).then(([fs1, fs2]) => {
    console.log(fs1 === fs2); // expected true
});
🙁 Actual behavior

When the compiled code with node is run, false is printed. This means that the two imported module namespace object is different. each __importStar call create a new module namespace object.

🙂 Expected behavior

true should be printed. The module namespace objects of these two import("fs") should be the same object.
If we run this script directly by node without compiled, true will be printed.

Additional information about the issue

To reproduce this issue, "module" in "tsconfig.json" need to be set to "commonjs". This makes tsc use __importStar and require to import the module.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le helper __importStar et le chemin du module CommonJS décrit dans l’issue, en utilisant l’exemple Playground lié et une exécution de Node.js comme reproduction. Comparez les deux résultats de Promise et suivez comment les appels répétés à import("fs") créent des objets namespace ; le travail est terminé lorsque le cas CommonJS compilé correspond au comportement direct de Node.js et renvoie le même objet.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
node.js, typescript
Domaine
build-system, compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
52/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.