@@ -1268,7 +1268,7 @@ namespace ts {
12681268 //
12691269
12701270 const prefix = getClassMemberPrefix ( node , member ) ;
1271- const memberName = getExpressionForPropertyName ( member ) ;
1271+ const memberName = getExpressionForPropertyName ( member , /*generateNameForComputedPropertyName*/ true ) ;
12721272 const descriptor = languageVersion > ScriptTarget . ES3
12731273 ? member . kind === SyntaxKind . PropertyDeclaration
12741274 // We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
@@ -1742,10 +1742,12 @@ namespace ts {
17421742 *
17431743 * @param member The member whose name should be converted into an expression.
17441744 */
1745- function getExpressionForPropertyName ( member : ClassElement | EnumMember ) : Expression {
1745+ function getExpressionForPropertyName ( member : ClassElement | EnumMember , generateNameForComputedPropertyName : boolean ) : Expression {
17461746 const name = member . name ;
17471747 if ( isComputedPropertyName ( name ) ) {
1748- return getGeneratedNameForNode ( name ) ;
1748+ return generateNameForComputedPropertyName
1749+ ? getGeneratedNameForNode ( name )
1750+ : ( < ComputedPropertyName > name ) . expression ;
17491751 }
17501752 else if ( isIdentifier ( name ) ) {
17511753 return createLiteral ( name . text ) ;
@@ -2329,7 +2331,10 @@ namespace ts {
23292331 * @param member The enum member node.
23302332 */
23312333 function transformEnumMember ( member : EnumMember ) : Statement {
2332- const name = getExpressionForPropertyName ( member ) ;
2334+ // enums don't support computed properties
2335+ // we pass false as 'generateNameForComputedPropertyName' for a backward compatibility purposes
2336+ // old emitter always generate 'expression' part of the name as-is.
2337+ const name = getExpressionForPropertyName ( member , /*generateNameForComputedPropertyName*/ false ) ;
23332338 return createStatement (
23342339 createAssignment (
23352340 createElementAccess (
0 commit comments