Skip to content

Correct declaration emit of commonjs exports of namespace-nested classes #40479

Open
@sandersn

Description

@sandersn

Followup to #40228:

var NS = {}
NS.K =class {
    values() {
        return new NS.K()
    }
}
exports.K = NS.K;

Expected behavior:

Should produce d.ts output:

declare namespace NS {
    class _K {
      values(): _K;
    }
    export {_K as K};
}
import _K = NS.K;
export {_K as K};

Actual behavior:

export var K: {
    new (): {
        values(): any;
    };
};
  1. Inlines and destroys the namespace.
  2. Only exports a value, not a class.
  3. Doesn't serialise nested typed references to K properly.

The declaration emitter just needs code to support this; right now it's hitting inaccurate fallback code.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScript

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions