Skip to content

Commit fed2315

Browse files
TypeScript Botrbuckton
TypeScript Bot
andauthored
Cherry-pick PR microsoft#44186 into release-4.3 (microsoft#44188)
Component commits: acdaf36 Move class name capture for private state until after declaration evaluates Co-authored-by: Ron Buckton <[email protected]>
1 parent dec8261 commit fed2315

File tree

4 files changed

+92
-2
lines changed

4 files changed

+92
-2
lines changed

src/compiler/transformers/classFields.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -658,13 +658,14 @@ namespace ts {
658658
}
659659

660660
const staticProperties = getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
661+
let pendingPrivateStateAssignment: BinaryExpression | undefined;
661662
if (shouldTransformPrivateElements && some(node.members, m => hasStaticModifier(m) && !!m.name && isPrivateIdentifier(m.name))) {
662663
const temp = factory.createTempVariable(hoistVariableDeclaration, /* reservedInNestedScopes */ true);
663664
getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
664-
getPendingExpressions().push(factory.createAssignment(
665+
pendingPrivateStateAssignment = factory.createAssignment(
665666
temp,
666667
factory.getInternalName(node)
667-
));
668+
);
668669
}
669670

670671
const extendsClauseElement = getEffectiveBaseTypeNode(node);
@@ -682,6 +683,10 @@ namespace ts {
682683
)
683684
];
684685

686+
if (pendingPrivateStateAssignment) {
687+
getPendingExpressions().unshift(pendingPrivateStateAssignment);
688+
}
689+
685690
// Write any pending expressions from elided or moved computed property names
686691
if (some(pendingExpressions)) {
687692
statements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//// [privateNameComputedPropertyName4.ts]
2+
// https://github.com/microsoft/TypeScript/issues/44113
3+
class C1 {
4+
static #qux = 42;
5+
["bar"] () {}
6+
}
7+
class C2 {
8+
static #qux = 42;
9+
static ["bar"] () {}
10+
}
11+
class C3 {
12+
static #qux = 42;
13+
static ["bar"] = "test";
14+
}
15+
16+
17+
//// [privateNameComputedPropertyName4.js]
18+
var _a, _C1_qux, _b, _C2_qux, _c, _C3_qux;
19+
// https://github.com/microsoft/TypeScript/issues/44113
20+
class C1 {
21+
["bar"]() { }
22+
}
23+
_a = C1;
24+
_C1_qux = { value: 42 };
25+
class C2 {
26+
static ["bar"]() { }
27+
}
28+
_b = C2;
29+
_C2_qux = { value: 42 };
30+
class C3 {
31+
}
32+
_c = C3;
33+
_C3_qux = { value: 42 };
34+
Object.defineProperty(C3, "bar", {
35+
enumerable: true,
36+
configurable: true,
37+
writable: true,
38+
value: "test"
39+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//// [privateNameComputedPropertyName4.ts]
2+
// https://github.com/microsoft/TypeScript/issues/44113
3+
class C1 {
4+
static #qux = 42;
5+
["bar"] () {}
6+
}
7+
class C2 {
8+
static #qux = 42;
9+
static ["bar"] () {}
10+
}
11+
class C3 {
12+
static #qux = 42;
13+
static ["bar"] = "test";
14+
}
15+
16+
17+
//// [privateNameComputedPropertyName4.js]
18+
// https://github.com/microsoft/TypeScript/issues/44113
19+
class C1 {
20+
static #qux = 42;
21+
["bar"]() { }
22+
}
23+
class C2 {
24+
static #qux = 42;
25+
static ["bar"]() { }
26+
}
27+
class C3 {
28+
static #qux = 42;
29+
static ["bar"] = "test";
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// @target: esnext, es2015
2+
// @useDefineForClassFields: true
3+
// @noTypesAndSymbols: true
4+
// https://github.com/microsoft/TypeScript/issues/44113
5+
class C1 {
6+
static #qux = 42;
7+
["bar"] () {}
8+
}
9+
class C2 {
10+
static #qux = 42;
11+
static ["bar"] () {}
12+
}
13+
class C3 {
14+
static #qux = 42;
15+
static ["bar"] = "test";
16+
}

0 commit comments

Comments
 (0)