Skip to content

Commit 4a77306

Browse files
committed
fix(49594): allow enum members in computed properties
1 parent 74d76e9 commit 4a77306

File tree

6 files changed

+115
-1
lines changed

6 files changed

+115
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23337,7 +23337,7 @@ namespace ts {
2333723337
}
2333823338
if (isEntityNameExpression(node.argumentExpression)) {
2333923339
const symbol = resolveEntityName(node.argumentExpression, SymbolFlags.Value, /*ignoreErrors*/ true);
23340-
if (!symbol || !isConstVariable(symbol)) return undefined;
23340+
if (!symbol || !(isConstVariable(symbol) || (symbol.flags & SymbolFlags.EnumMember))) return undefined;
2334123341

2334223342
const declaration = symbol.valueDeclaration;
2334323343
if (declaration === undefined) return undefined;

tests/baselines/reference/strictPropertyInitialization.errors.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,16 @@ tests/cases/conformance/classes/propertyMemberDeclarations/strictPropertyInitial
179179
this['c'] = 1;
180180
}
181181
}
182+
183+
enum E {
184+
A = "A",
185+
B = "B"
186+
}
187+
class C13 {
188+
[E.A]: number;
189+
190+
constructor() {
191+
this[E.A] = 1;
192+
}
193+
}
182194

tests/baselines/reference/strictPropertyInitialization.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@ class C12 {
147147
this['c'] = 1;
148148
}
149149
}
150+
151+
enum E {
152+
A = "A",
153+
B = "B"
154+
}
155+
class C13 {
156+
[E.A]: number;
157+
158+
constructor() {
159+
this[E.A] = 1;
160+
}
161+
}
150162

151163

152164
//// [strictPropertyInitialization.js]
@@ -259,6 +271,17 @@ class C12 {
259271
this['c'] = 1;
260272
}
261273
}
274+
var E;
275+
(function (E) {
276+
E["A"] = "A";
277+
E["B"] = "B";
278+
})(E || (E = {}));
279+
class C13 {
280+
constructor() {
281+
this[E.A] = 1;
282+
}
283+
}
284+
E.A;
262285

263286

264287
//// [strictPropertyInitialization.d.ts]
@@ -335,3 +358,11 @@ declare class C12 {
335358
['c']: number;
336359
constructor();
337360
}
361+
declare enum E {
362+
A = "A",
363+
B = "B"
364+
}
365+
declare class C13 {
366+
[E.A]: number;
367+
constructor();
368+
}

tests/baselines/reference/strictPropertyInitialization.symbols

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,3 +348,30 @@ class C12 {
348348
}
349349
}
350350

351+
enum E {
352+
>E : Symbol(E, Decl(strictPropertyInitialization.ts, 147, 1))
353+
354+
A = "A",
355+
>A : Symbol(E.A, Decl(strictPropertyInitialization.ts, 149, 8))
356+
357+
B = "B"
358+
>B : Symbol(E.B, Decl(strictPropertyInitialization.ts, 150, 12))
359+
}
360+
class C13 {
361+
>C13 : Symbol(C13, Decl(strictPropertyInitialization.ts, 152, 1))
362+
363+
[E.A]: number;
364+
>[E.A] : Symbol(C13[E.A], Decl(strictPropertyInitialization.ts, 153, 11))
365+
>E.A : Symbol(E.A, Decl(strictPropertyInitialization.ts, 149, 8))
366+
>E : Symbol(E, Decl(strictPropertyInitialization.ts, 147, 1))
367+
>A : Symbol(E.A, Decl(strictPropertyInitialization.ts, 149, 8))
368+
369+
constructor() {
370+
this[E.A] = 1;
371+
>this : Symbol(C13, Decl(strictPropertyInitialization.ts, 152, 1))
372+
>E.A : Symbol(E.A, Decl(strictPropertyInitialization.ts, 149, 8))
373+
>E : Symbol(E, Decl(strictPropertyInitialization.ts, 147, 1))
374+
>A : Symbol(E.A, Decl(strictPropertyInitialization.ts, 149, 8))
375+
}
376+
}
377+

tests/baselines/reference/strictPropertyInitialization.types

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,35 @@ class C12 {
395395
}
396396
}
397397

398+
enum E {
399+
>E : E
400+
401+
A = "A",
402+
>A : E.A
403+
>"A" : "A"
404+
405+
B = "B"
406+
>B : E.B
407+
>"B" : "B"
408+
}
409+
class C13 {
410+
>C13 : C13
411+
412+
[E.A]: number;
413+
>[E.A] : number
414+
>E.A : E.A
415+
>E : typeof E
416+
>A : E.A
417+
418+
constructor() {
419+
this[E.A] = 1;
420+
>this[E.A] = 1 : 1
421+
>this[E.A] : number
422+
>this : this
423+
>E.A : E.A
424+
>E : typeof E
425+
>A : E.A
426+
>1 : 1
427+
}
428+
}
429+

tests/cases/conformance/classes/propertyMemberDeclarations/strictPropertyInitialization.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,15 @@ class C12 {
150150
this['c'] = 1;
151151
}
152152
}
153+
154+
enum E {
155+
A = "A",
156+
B = "B"
157+
}
158+
class C13 {
159+
[E.A]: number;
160+
161+
constructor() {
162+
this[E.A] = 1;
163+
}
164+
}

0 commit comments

Comments
 (0)