diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 56a36f658d719..3145e49a43c9e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -39377,7 +39377,7 @@ namespace ts { if (memberSymbol) { const declaration = memberSymbol.valueDeclaration; if (declaration !== member) { - if (declaration && isBlockScopedNameDeclaredBeforeUse(declaration, member)) { + if (declaration && isBlockScopedNameDeclaredBeforeUse(declaration, member) && isEnumDeclaration(declaration.parent)) { return getEnumMemberValue(declaration as EnumMember); } error(expr, Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums); diff --git a/tests/baselines/reference/enumWithExport.errors.txt b/tests/baselines/reference/enumWithExport.errors.txt new file mode 100644 index 0000000000000..486b7ed95e41f --- /dev/null +++ b/tests/baselines/reference/enumWithExport.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/enumWithExport.ts(5,7): error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums. + + +==== tests/cases/compiler/enumWithExport.ts (1 errors) ==== + namespace x { + export let y = 123 + } + enum x { + z = y + ~ +!!! error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums. + } \ No newline at end of file diff --git a/tests/baselines/reference/enumWithExport.js b/tests/baselines/reference/enumWithExport.js new file mode 100644 index 0000000000000..0660663b79704 --- /dev/null +++ b/tests/baselines/reference/enumWithExport.js @@ -0,0 +1,16 @@ +//// [enumWithExport.ts] +namespace x { + export let y = 123 +} +enum x { + z = y +} + +//// [enumWithExport.js] +var x; +(function (x) { + x.y = 123; +})(x || (x = {})); +(function (x) { + x[x["z"] = 0] = "z"; +})(x || (x = {})); diff --git a/tests/baselines/reference/enumWithExport.symbols b/tests/baselines/reference/enumWithExport.symbols new file mode 100644 index 0000000000000..4656d86d160f8 --- /dev/null +++ b/tests/baselines/reference/enumWithExport.symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/enumWithExport.ts === +namespace x { +>x : Symbol(x, Decl(enumWithExport.ts, 0, 0), Decl(enumWithExport.ts, 2, 1)) + + export let y = 123 +>y : Symbol(y, Decl(enumWithExport.ts, 1, 12)) +} +enum x { +>x : Symbol(x, Decl(enumWithExport.ts, 0, 0), Decl(enumWithExport.ts, 2, 1)) + + z = y +>z : Symbol(x.z, Decl(enumWithExport.ts, 3, 8)) +} diff --git a/tests/baselines/reference/enumWithExport.types b/tests/baselines/reference/enumWithExport.types new file mode 100644 index 0000000000000..e616e9d4e1f86 --- /dev/null +++ b/tests/baselines/reference/enumWithExport.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/enumWithExport.ts === +namespace x { +>x : typeof x + + export let y = 123 +>y : number +>123 : 123 +} +enum x { +>x : x + + z = y +>z : x.z +>y : any +} diff --git a/tests/cases/compiler/enumWithExport.ts b/tests/cases/compiler/enumWithExport.ts new file mode 100644 index 0000000000000..0852a5b1a0079 --- /dev/null +++ b/tests/cases/compiler/enumWithExport.ts @@ -0,0 +1,6 @@ +namespace x { + export let y = 123 +} +enum x { + z = y +} \ No newline at end of file