diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index d335ceb1b6037..07b1208688fab 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4527,6 +4527,8 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: return generateNameForMethodOrAccessor(node); + case SyntaxKind.ComputedPropertyName: + return makeTempVariableName(TempFlags.Auto, /*reserveInNestedScopes*/ true); default: return makeTempVariableName(TempFlags.Auto); } diff --git a/tests/baselines/reference/instanceMemberWithComputedPropertyName.js b/tests/baselines/reference/instanceMemberWithComputedPropertyName.js new file mode 100644 index 0000000000000..eba55c9899e64 --- /dev/null +++ b/tests/baselines/reference/instanceMemberWithComputedPropertyName.js @@ -0,0 +1,22 @@ +//// [instanceMemberWithComputedPropertyName.ts] +// https://github.com/microsoft/TypeScript/issues/30953 +const x = 1; +class C { + [x] = true; + constructor() { + const { a, b } = { a: 1, b: 2 }; + } +} + +//// [instanceMemberWithComputedPropertyName.js] +var _a; +// https://github.com/microsoft/TypeScript/issues/30953 +var x = 1; +var C = /** @class */ (function () { + function C() { + this[_a] = true; + var _b = { a: 1, b: 2 }, a = _b.a, b = _b.b; + } + return C; +}()); +_a = x; diff --git a/tests/baselines/reference/instanceMemberWithComputedPropertyName.symbols b/tests/baselines/reference/instanceMemberWithComputedPropertyName.symbols new file mode 100644 index 0000000000000..3d405c89cc87a --- /dev/null +++ b/tests/baselines/reference/instanceMemberWithComputedPropertyName.symbols @@ -0,0 +1,20 @@ +=== tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts === +// https://github.com/microsoft/TypeScript/issues/30953 +const x = 1; +>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 1, 5)) + +class C { +>C : Symbol(C, Decl(instanceMemberWithComputedPropertyName.ts, 1, 12)) + + [x] = true; +>[x] : Symbol(C[x], Decl(instanceMemberWithComputedPropertyName.ts, 2, 9)) +>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 1, 5)) + + constructor() { + const { a, b } = { a: 1, b: 2 }; +>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 5, 15)) +>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 5, 18)) +>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 5, 26)) +>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 5, 32)) + } +} diff --git a/tests/baselines/reference/instanceMemberWithComputedPropertyName.types b/tests/baselines/reference/instanceMemberWithComputedPropertyName.types new file mode 100644 index 0000000000000..f98cc7bb80a84 --- /dev/null +++ b/tests/baselines/reference/instanceMemberWithComputedPropertyName.types @@ -0,0 +1,25 @@ +=== tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts === +// https://github.com/microsoft/TypeScript/issues/30953 +const x = 1; +>x : 1 +>1 : 1 + +class C { +>C : C + + [x] = true; +>[x] : boolean +>x : 1 +>true : true + + constructor() { + const { a, b } = { a: 1, b: 2 }; +>a : number +>b : number +>{ a: 1, b: 2 } : { a: number; b: number; } +>a : number +>1 : 1 +>b : number +>2 : 2 + } +} diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts new file mode 100644 index 0000000000000..31aec681445a5 --- /dev/null +++ b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts @@ -0,0 +1,8 @@ +// https://github.com/microsoft/TypeScript/issues/30953 +const x = 1; +class C { + [x] = true; + constructor() { + const { a, b } = { a: 1, b: 2 }; + } +} \ No newline at end of file