diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f2b9d50db91..bf1cc33d159 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -21517,7 +21517,7 @@ namespace ts { else { const argument = ex.argumentExpression; Debug.assert(isLiteralExpression(argument)); - name = (argument as LiteralExpression).text as __String; // TODO: GH#17348 + name = escapeLeadingUnderscores((argument as LiteralExpression).text); } return evaluateEnumMember(expr, type.symbol, name); } diff --git a/tests/baselines/reference/underscoreEscapedNameInEnum.js b/tests/baselines/reference/underscoreEscapedNameInEnum.js new file mode 100644 index 00000000000..db40f126739 --- /dev/null +++ b/tests/baselines/reference/underscoreEscapedNameInEnum.js @@ -0,0 +1,13 @@ +//// [underscoreEscapedNameInEnum.ts] +enum E { + "__foo" = 1, + bar = E["__foo"] + 1 +} + + +//// [underscoreEscapedNameInEnum.js] +var E; +(function (E) { + E[E["__foo"] = 1] = "__foo"; + E[E["bar"] = 2] = "bar"; +})(E || (E = {})); diff --git a/tests/baselines/reference/underscoreEscapedNameInEnum.symbols b/tests/baselines/reference/underscoreEscapedNameInEnum.symbols new file mode 100644 index 00000000000..4546d844cd2 --- /dev/null +++ b/tests/baselines/reference/underscoreEscapedNameInEnum.symbols @@ -0,0 +1,10 @@ +=== tests/cases/compiler/underscoreEscapedNameInEnum.ts === +enum E { +>E : Symbol(E, Decl(underscoreEscapedNameInEnum.ts, 0, 0)) + + "__foo" = 1, + bar = E["__foo"] + 1 +>bar : Symbol(E.bar, Decl(underscoreEscapedNameInEnum.ts, 1, 16)) +>E : Symbol(E, Decl(underscoreEscapedNameInEnum.ts, 0, 0)) +} + diff --git a/tests/baselines/reference/underscoreEscapedNameInEnum.types b/tests/baselines/reference/underscoreEscapedNameInEnum.types new file mode 100644 index 00000000000..02fc9a5493c --- /dev/null +++ b/tests/baselines/reference/underscoreEscapedNameInEnum.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/underscoreEscapedNameInEnum.ts === +enum E { +>E : E + + "__foo" = 1, +>1 : 1 + + bar = E["__foo"] + 1 +>bar : E +>E["__foo"] + 1 : number +>E["__foo"] : E +>E : typeof E +>"__foo" : "__foo" +>1 : 1 +} + diff --git a/tests/cases/compiler/underscoreEscapedNameInEnum.ts b/tests/cases/compiler/underscoreEscapedNameInEnum.ts new file mode 100644 index 00000000000..ef16f253dd7 --- /dev/null +++ b/tests/cases/compiler/underscoreEscapedNameInEnum.ts @@ -0,0 +1,4 @@ +enum E { + "__foo" = 1, + bar = E["__foo"] + 1 +}