diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index d392785d4181f..75308ce5d2fc0 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -24508,6 +24508,9 @@ func (c *Checker) getDeclaredTypeOfEnumMember(symbol *ast.Symbol) *Type { } func (c *Checker) computeEnumMemberValues(node *ast.Node) { + if node == nil || node.Kind != ast.KindEnumDeclaration { + return + } nodeLinks := c.nodeLinks.Get(node) if !(nodeLinks.flags&NodeCheckFlagsEnumValuesComputed != 0) { nodeLinks.flags |= NodeCheckFlagsEnumValuesComputed diff --git a/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.errors.txt b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.errors.txt new file mode 100644 index 0000000000000..6c78957f26d6a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.errors.txt @@ -0,0 +1,9 @@ +enumMemberListModuleBlock.ts(2,14): error TS18033: Type 'typeof C' is not assignable to type 'number' as required for computed enum member values. + + +==== enumMemberListModuleBlock.ts (1 errors) ==== + namespace E { export class C {} } + enum E { D = E["C"] } + ~~~~~~ +!!! error TS18033: Type 'typeof C' is not assignable to type 'number' as required for computed enum member values. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.js b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.js new file mode 100644 index 0000000000000..f460dd78318e1 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.js @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/enumMemberListModuleBlock.ts] //// + +//// [enumMemberListModuleBlock.ts] +namespace E { export class C {} } +enum E { D = E["C"] } + + +//// [enumMemberListModuleBlock.js] +"use strict"; +var E; +(function (E) { + class C { + } + E.C = C; +})(E || (E = {})); +(function (E) { + E[E["D"] = E["C"]] = "D"; +})(E || (E = {})); diff --git a/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.symbols b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.symbols new file mode 100644 index 0000000000000..9c9b7b73ac09a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.symbols @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/enumMemberListModuleBlock.ts] //// + +=== enumMemberListModuleBlock.ts === +namespace E { export class C {} } +>E : Symbol(E, Decl(enumMemberListModuleBlock.ts, 0, 0), Decl(enumMemberListModuleBlock.ts, 0, 33)) +>C : Symbol(C, Decl(enumMemberListModuleBlock.ts, 0, 13)) + +enum E { D = E["C"] } +>E : Symbol(E, Decl(enumMemberListModuleBlock.ts, 0, 0), Decl(enumMemberListModuleBlock.ts, 0, 33)) +>D : Symbol(E.D, Decl(enumMemberListModuleBlock.ts, 1, 8)) +>E : Symbol(E, Decl(enumMemberListModuleBlock.ts, 0, 0), Decl(enumMemberListModuleBlock.ts, 0, 33)) +>"C" : Symbol(E.C, Decl(enumMemberListModuleBlock.ts, 0, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.types b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.types new file mode 100644 index 0000000000000..3ddf454b67f80 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/enumMemberListModuleBlock.types @@ -0,0 +1,14 @@ +//// [tests/cases/compiler/enumMemberListModuleBlock.ts] //// + +=== enumMemberListModuleBlock.ts === +namespace E { export class C {} } +>E : typeof E +>C : C + +enum E { D = E["C"] } +>E : E +>D : E.D +>E["C"] : typeof E.C +>E : typeof E +>"C" : "C" + diff --git a/tsc/testdata/tests/cases/compiler/enumMemberListModuleBlock.ts b/tsc/testdata/tests/cases/compiler/enumMemberListModuleBlock.ts new file mode 100644 index 0000000000000..3decb5909737b --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/enumMemberListModuleBlock.ts @@ -0,0 +1,2 @@ +namespace E { export class C {} } +enum E { D = E["C"] }