diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7dddeaac50788..266e651bac3a8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -41629,7 +41629,7 @@ namespace ts { if (symbol && (symbol.flags & SymbolFlags.EnumMember)) { // inline property\index accesses only for const enums const member = symbol.valueDeclaration as EnumMember; - if (isEnumConst(member.parent)) { + if (isEnumConst(member.parent) || host.getProjectReferenceRedirect(getSourceFileOfNode(member).originalFileName)) { return getEnumMemberValue(member); } } diff --git a/src/compiler/transformers/declarations.ts b/src/compiler/transformers/declarations.ts index 6cea3b85055ee..175f08f8b4c9e 100644 --- a/src/compiler/transformers/declarations.ts +++ b/src/compiler/transformers/declarations.ts @@ -1577,6 +1577,10 @@ namespace ts { mask ^= ModifierFlags.Ambient; additions = ModifierFlags.None; } + // Transform non-ambient const enums -> ambient non-const enums if preserveConstEnums is true + if (!(node.flags & NodeFlags.Ambient) && isEnumDeclaration(node) && shouldPreserveConstEnums(options)) { + mask ^= ModifierFlags.Const; + } return maskModifierFlags(node, mask, additions); }