Skip to content

Generated code when re-exporting a const enum using "preserveConstEnums": true is inconsistent #23514

Closed
@elliottsj

Description

@elliottsj

TypeScript Version: 2.8.1 and 2.9.0-dev.20180418

Search Terms: const enum import export preserveConstEnums

Code

ConstEnum.ts
const enum MyConstEnum {
  Foo,
  Bar
};
export { MyConstEnum };
ImportExport.ts
import { MyConstEnum } from './MyConstEnum';
export default MyConstEnum;
ReExport.ts
export { MyConstEnum as default } from './MyConstEnum';

Compile the above using

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "preserveConstEnums": true
  }
}

Expected behavior:

Both ImportExport.ts and ReExport.ts compile to

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MyConstEnum_1 = require("./MyConstEnum");
exports.default = MyConstEnum_1.MyConstEnum;

Actual behavior:

ReExport.js is as expected, but ImportExport.js is:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = MyConstEnum_1.MyConstEnum;

i.e. we are missing

var MyConstEnum_1 = require("./MyConstEnum");

This results in a runtime error due to MyConstEnum_1 being undefined.

Related Issues:
#18644

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions