diff --git a/internal/checker/checker.go b/internal/checker/checker.go index b639d488e44..0da7233e1b5 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -23787,7 +23787,7 @@ func (c *Checker) getDeclaredTypeOfEnum(symbol *ast.Symbol) *Type { for _, declaration := range symbol.Declarations { if declaration.Kind == ast.KindEnumDeclaration { for _, member := range declaration.Members() { - if c.hasBindableName(member) { + if !ast.HasDynamicName(member) { memberSymbol := c.getSymbolOfDeclaration(member) value := c.getEnumMemberValue(member).Value var memberType *Type diff --git a/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.errors.txt b/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.errors.txt new file mode 100644 index 00000000000..175b1c1a775 --- /dev/null +++ b/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.errors.txt @@ -0,0 +1,15 @@ +computedEnumMemberKeyNoCrash1.ts(4,5): error TS1164: Computed property names are not allowed in enums. + + +==== computedEnumMemberKeyNoCrash1.ts (1 errors) ==== + // https://github.com/microsoft/TypeScript/issues/63173 + + declare const enum E { + [foo] = 1, + ~~~~~ +!!! error TS1164: Computed property names are not allowed in enums. + A, + foo = 10, + } + E.A.toString(); + \ No newline at end of file diff --git a/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.symbols b/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.symbols new file mode 100644 index 00000000000..e4cd6757673 --- /dev/null +++ b/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/computedEnumMemberKeyNoCrash1.ts] //// + +=== computedEnumMemberKeyNoCrash1.ts === +// https://github.com/microsoft/TypeScript/issues/63173 + +declare const enum E { +>E : Symbol(E, Decl(computedEnumMemberKeyNoCrash1.ts, 0, 0)) + + [foo] = 1, +>[foo] : Symbol(E[foo], Decl(computedEnumMemberKeyNoCrash1.ts, 2, 22)) +>foo : Symbol(E.foo, Decl(computedEnumMemberKeyNoCrash1.ts, 4, 6)) + + A, +>A : Symbol(E.A, Decl(computedEnumMemberKeyNoCrash1.ts, 3, 14)) + + foo = 10, +>foo : Symbol(E.foo, Decl(computedEnumMemberKeyNoCrash1.ts, 4, 6)) +} +E.A.toString(); +>E.A.toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --)) +>E.A : Symbol(E.A, Decl(computedEnumMemberKeyNoCrash1.ts, 3, 14)) +>E : Symbol(E, Decl(computedEnumMemberKeyNoCrash1.ts, 0, 0)) +>A : Symbol(E.A, Decl(computedEnumMemberKeyNoCrash1.ts, 3, 14)) +>toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --)) + diff --git a/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.types b/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.types new file mode 100644 index 00000000000..77d0454af7a --- /dev/null +++ b/testdata/baselines/reference/compiler/computedEnumMemberKeyNoCrash1.types @@ -0,0 +1,28 @@ +//// [tests/cases/compiler/computedEnumMemberKeyNoCrash1.ts] //// + +=== computedEnumMemberKeyNoCrash1.ts === +// https://github.com/microsoft/TypeScript/issues/63173 + +declare const enum E { +>E : E + + [foo] = 1, +>[foo] : E +>foo : E.foo +>1 : 1 + + A, +>A : E.A + + foo = 10, +>foo : E.foo +>10 : 10 +} +E.A.toString(); +>E.A.toString() : string +>E.A.toString : (radix?: number) => string +>E.A : E.A +>E : typeof E +>A : E.A +>toString : (radix?: number) => string + diff --git a/testdata/tests/cases/compiler/computedEnumMemberKeyNoCrash1.ts b/testdata/tests/cases/compiler/computedEnumMemberKeyNoCrash1.ts new file mode 100644 index 00000000000..f451e0c87c8 --- /dev/null +++ b/testdata/tests/cases/compiler/computedEnumMemberKeyNoCrash1.ts @@ -0,0 +1,11 @@ +// @strict: true +// @noEmit: true + +// https://github.com/microsoft/TypeScript/issues/63173 + +declare const enum E { + [foo] = 1, + A, + foo = 10, +} +E.A.toString();