Skip to content

Commit 0371187

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

File tree

6 files changed

+112
-1
lines changed

6 files changed

+112
-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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,15 @@ 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+
constructor() {
190+
this[E.A] = 1;
191+
}
192+
}
182193

tests/baselines/reference/strictPropertyInitialization.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,17 @@ 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+
constructor() {
158+
this[E.A] = 1;
159+
}
160+
}
150161

151162

152163
//// [strictPropertyInitialization.js]
@@ -259,6 +270,17 @@ class C12 {
259270
this['c'] = 1;
260271
}
261272
}
273+
var E;
274+
(function (E) {
275+
E["A"] = "A";
276+
E["B"] = "B";
277+
})(E || (E = {}));
278+
class C13 {
279+
constructor() {
280+
this[E.A] = 1;
281+
}
282+
}
283+
E.A;
262284

263285

264286
//// [strictPropertyInitialization.d.ts]
@@ -335,3 +357,11 @@ declare class C12 {
335357
['c']: number;
336358
constructor();
337359
}
360+
declare enum E {
361+
A = "A",
362+
B = "B"
363+
}
364+
declare class C13 {
365+
[E.A]: number;
366+
constructor();
367+
}

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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,14 @@ 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+
constructor() {
161+
this[E.A] = 1;
162+
}
163+
}

0 commit comments

Comments
 (0)