diff --git a/packages/babel-plugin-transform-typescript/src/const-enum.ts b/packages/babel-plugin-transform-typescript/src/const-enum.ts index 7d241997f1f1..dd4ff335b036 100644 --- a/packages/babel-plugin-transform-typescript/src/const-enum.ts +++ b/packages/babel-plugin-transform-typescript/src/const-enum.ts @@ -16,9 +16,13 @@ export default function transpileConstEnum( isExported = path.parent.body.some( stmt => t.isExportNamedDeclaration(stmt) && + stmt.exportKind !== "type" && !stmt.source && stmt.specifiers.some( - spec => t.isExportSpecifier(spec) && spec.local.name === name, + spec => + t.isExportSpecifier(spec) && + spec.exportKind !== "type" && + spec.local.name === name, ), ); } diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-and-value/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-and-value/input.ts new file mode 100644 index 000000000000..4222128fe30b --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-and-value/input.ts @@ -0,0 +1,9 @@ +const enum WhitespaceFlag { + before = 1 << 0, + after = 1 << 1, +} + +export type { WhitespaceFlag as WF1 }; +export { WhitespaceFlag as WF2 }; + +export const before = WhitespaceFlag.before; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-and-value/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-and-value/output.mjs new file mode 100644 index 000000000000..cd7d64442d6a --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-and-value/output.mjs @@ -0,0 +1,6 @@ +var WhitespaceFlag = { + before: 1, + after: 2 +}; +export { WhitespaceFlag as WF2 }; +export const before = WhitespaceFlag.before; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-no-deopt/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-no-deopt/input.ts new file mode 100644 index 000000000000..7907128d458d --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-no-deopt/input.ts @@ -0,0 +1,9 @@ +const enum WhitespaceFlag { + before = 1 << 0, + after = 1 << 1, +} + +export type { WhitespaceFlag as WF1 }; +export { type WhitespaceFlag as WF2 }; + +export const before = WhitespaceFlag.before; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-no-deopt/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-no-deopt/output.mjs new file mode 100644 index 000000000000..7d4620689167 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/optimize-const-enums/export-const-enum-type-no-deopt/output.mjs @@ -0,0 +1,2 @@ +export {}; +export const before = 1;