Microsoft/TypeScript

'Export as namespace' issue in generating ambient code of same namespace

Open

#47 220 ouverte le 22 déc. 2021

Voir sur GitHub
 (0 commentaires) (1 réaction) (0 assignés)TypeScript (6 726 forks)batch import
BugDomain: JS EmitHelp Wanted

Métriques du dépôt

Stars
 (48 455 stars)
Métriques de merge PR
 (Merge moyen 6j 17h) (9 PRs mergées en 30 j)

Description

Bug Report

When using "export as namespace" feature in a declaration file, the exported classes are working as intended in 'legacy' ambient-style TS code that is still using namespaces, but the emitted .JS code lacks of the namespace in the case of namespace merging.

🔎 Search Terms

namespaces, modules, export as

🕗 Version & Regression Information

Typescript 4.5.4

  • It is replicable on 3.9.7 as well, so it doesn't seems a recent regression.

⏯ Playground Link

Playground link with relevant code

💻 Code

// api.d.ts
export declare class Class1 { }
export as namespace ns;

// test.ts
/// <reference path="./api.d.ts">
const x = new ns.Class1();
// Merging namespaces
namespace ns {
   const x = new Class1();
}

🙁 Actual behavior

The code above compiles without errors. However, the emitted JS is not using the ns object, when augmenting the ns namespace:

const x = new ns.Class1();  // <-- this is correct
var ns;
(function (ns) {
    const x = new Class1();   // <-- Class1 is undefined, ns.Class1 should be used instead
})(ns || (ns = {}));

🙂 Expected behavior

const x = new ns.Class1();
var ns;
(function (ns) {
    const x = new ns.Class1();
})(ns || (ns = {}));

Thanks!

Guide contributeur