Skip to content

TypeScript: handle implicit cross-namespace export references #1410

@osv

Description

@osv

given next source.ts:

namespace STD {
    export  function A() {
        console.log('fun A')
    }
}

namespace STD {
    export function B() {
        console.log('fun B')
        A()
    }
}

console.log(STD.B())

Compiled by ms ts tsc --outfile out-ts.js source.ts:

var STD;
(function (STD) {
    function A() {
        console.log('fun A');
    }
    STD.A = A;
})(STD || (STD = {}));
(function (STD) {
    function B() {
        console.log('fun B');
        STD.A();   // <--- Look here
    }
    STD.B = B;
})(STD || (STD = {}));
console.log(STD.B());

Compiled by esbuild esbuild source.ts --bundle:

(() => {
  // source.ts
  var STD;
  (function(STD2) {
    function A2() {
      console.log("fun A");
    }
    STD2.A = A2;
  })(STD || (STD = {}));
  (function(STD2) {
    function B() {
      console.log("fun B");
      A();   // <--- Look here, Expected: STD.A()
    }
    STD2.B = B;
  })(STD || (STD = {}));
  console.log(STD.B());
})();

Question: Is it possible to make esbuild compile like original typescript and prevent module or namespace isolation? And make possible to call function within same namespace.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions