Skip to content

Commit 3c5b2a5

Browse files
committed
Test Literal-typed computed property names in obj literals
1 parent ac58751 commit 3c5b2a5

14 files changed

+501
-20
lines changed

tests/baselines/reference/computedPropertyNames46_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames46_ES5.ts ===
22
var o = {
3-
>o : { [x: number]: number; }
4-
>{ ["" || 0]: 0} : { [x: number]: number; }
3+
>o : { ["" || 0]: number; }
4+
>{ ["" || 0]: 0} : { ["" || 0]: number; }
55

66
["" || 0]: 0
77
>"" || 0 : 0

tests/baselines/reference/computedPropertyNames46_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames46_ES6.ts ===
22
var o = {
3-
>o : { [x: number]: number; }
4-
>{ ["" || 0]: 0} : { [x: number]: number; }
3+
>o : { ["" || 0]: number; }
4+
>{ ["" || 0]: 0} : { ["" || 0]: number; }
55

66
["" || 0]: 0
77
>"" || 0 : 0

tests/baselines/reference/computedPropertyNames47_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ enum E2 { x }
88
>x : E2
99

1010
var o = {
11-
>o : { [x: number]: number; }
12-
>{ [E1.x || E2.x]: 0} : { [x: number]: number; }
11+
>o : { [E1.x || E2.x]: number; }
12+
>{ [E1.x || E2.x]: 0} : { [E1.x || E2.x]: number; }
1313

1414
[E1.x || E2.x]: 0
1515
>E1.x || E2.x : E2

tests/baselines/reference/computedPropertyNames47_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ enum E2 { x }
88
>x : E2
99

1010
var o = {
11-
>o : { [x: number]: number; }
12-
>{ [E1.x || E2.x]: 0} : { [x: number]: number; }
11+
>o : { [E1.x || E2.x]: number; }
12+
>{ [E1.x || E2.x]: 0} : { [E1.x || E2.x]: number; }
1313

1414
[E1.x || E2.x]: 0
1515
>E1.x || E2.x : E2

tests/baselines/reference/computedPropertyNames48_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ extractIndexer({
2828
extractIndexer({
2929
>extractIndexer({ [E.x]: ""}) : string
3030
>extractIndexer : <T>(p: { [n: number]: T; }) => T
31-
>{ [E.x]: ""} : { [x: number]: string; }
31+
>{ [E.x]: ""} : { [E.x]: string; }
3232

3333
[E.x]: ""
3434
>E.x : E
@@ -41,7 +41,7 @@ extractIndexer({
4141
extractIndexer({
4242
>extractIndexer({ ["" || 0]: ""}) : string
4343
>extractIndexer : <T>(p: { [n: number]: T; }) => T
44-
>{ ["" || 0]: ""} : { [x: number]: string; }
44+
>{ ["" || 0]: ""} : { ["" || 0]: string; }
4545

4646
["" || 0]: ""
4747
>"" || 0 : 0

tests/baselines/reference/computedPropertyNames48_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ extractIndexer({
2828
extractIndexer({
2929
>extractIndexer({ [E.x]: ""}) : string
3030
>extractIndexer : <T>(p: { [n: number]: T; }) => T
31-
>{ [E.x]: ""} : { [x: number]: string; }
31+
>{ [E.x]: ""} : { [E.x]: string; }
3232

3333
[E.x]: ""
3434
>E.x : E
@@ -41,7 +41,7 @@ extractIndexer({
4141
extractIndexer({
4242
>extractIndexer({ ["" || 0]: ""}) : string
4343
>extractIndexer : <T>(p: { [n: number]: T; }) => T
44-
>{ ["" || 0]: ""} : { [x: number]: string; }
44+
>{ ["" || 0]: ""} : { ["" || 0]: string; }
4545

4646
["" || 0]: ""
4747
>"" || 0 : 0

tests/baselines/reference/computedPropertyNames4_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; }
13-
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; }
12+
>v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
13+
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
1414

1515
[s]: 0,
1616
>s : string

tests/baselines/reference/computedPropertyNames4_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; }
13-
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; }
12+
>v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
13+
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
1414

1515
[s]: 0,
1616
>s : string

tests/baselines/reference/computedPropertyNames7_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ enum E {
66
>member : E
77
}
88
var v = {
9-
>v : { [x: number]: number; }
10-
>{ [E.member]: 0} : { [x: number]: number; }
9+
>v : { [E.member]: number; }
10+
>{ [E.member]: 0} : { [E.member]: number; }
1111

1212
[E.member]: 0
1313
>E.member : E

tests/baselines/reference/computedPropertyNames7_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ enum E {
66
>member : E
77
}
88
var v = {
9-
>v : { [x: number]: number; }
10-
>{ [E.member]: 0} : { [x: number]: number; }
9+
>v : { [E.member]: number; }
10+
>{ [E.member]: 0} : { [E.member]: number; }
1111

1212
[E.member]: 0
1313
>E.member : E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
//// [objectLiteralEnumPropertyNames.ts]
2+
// Fixes #16887
3+
enum Strs {
4+
A = 'a',
5+
B = 'b'
6+
}
7+
type TestStrs = { [key in Strs]: string }
8+
const x: TestStrs = {
9+
[Strs.A]: 'xo',
10+
[Strs.B]: 'xe'
11+
}
12+
const ux = {
13+
[Strs.A]: 'xo',
14+
[Strs.B]: 'xe'
15+
}
16+
const y: TestStrs = {
17+
['a']: 'yo',
18+
['b']: 'ye'
19+
}
20+
const a = 'a';
21+
const b = 'b';
22+
const z: TestStrs = {
23+
[a]: 'zo',
24+
[b]: 'ze'
25+
}
26+
const uz = {
27+
[a]: 'zo',
28+
[b]: 'ze'
29+
}
30+
31+
enum Nums {
32+
A,
33+
B
34+
}
35+
type TestNums = { 0: number, 1: number }
36+
const n: TestNums = {
37+
[Nums.A]: 1,
38+
[Nums.B]: 2
39+
}
40+
const un = {
41+
[Nums.A]: 3,
42+
[Nums.B]: 4
43+
}
44+
const an = 0;
45+
const bn = 1;
46+
const m: TestNums = {
47+
[an]: 5,
48+
[bn]: 6
49+
}
50+
const um = {
51+
[an]: 7,
52+
[bn]: 8
53+
}
54+
55+
56+
//// [objectLiteralEnumPropertyNames.js]
57+
// Fixes #16887
58+
var Strs;
59+
(function (Strs) {
60+
Strs["A"] = "a";
61+
Strs["B"] = "b";
62+
})(Strs || (Strs = {}));
63+
var x = (_a = {},
64+
_a[Strs.A] = 'xo',
65+
_a[Strs.B] = 'xe',
66+
_a);
67+
var ux = (_b = {},
68+
_b[Strs.A] = 'xo',
69+
_b[Strs.B] = 'xe',
70+
_b);
71+
var y = (_c = {},
72+
_c['a'] = 'yo',
73+
_c['b'] = 'ye',
74+
_c);
75+
var a = 'a';
76+
var b = 'b';
77+
var z = (_d = {},
78+
_d[a] = 'zo',
79+
_d[b] = 'ze',
80+
_d);
81+
var uz = (_e = {},
82+
_e[a] = 'zo',
83+
_e[b] = 'ze',
84+
_e);
85+
var Nums;
86+
(function (Nums) {
87+
Nums[Nums["A"] = 0] = "A";
88+
Nums[Nums["B"] = 1] = "B";
89+
})(Nums || (Nums = {}));
90+
var n = (_f = {},
91+
_f[Nums.A] = 1,
92+
_f[Nums.B] = 2,
93+
_f);
94+
var un = (_g = {},
95+
_g[Nums.A] = 3,
96+
_g[Nums.B] = 4,
97+
_g);
98+
var an = 0;
99+
var bn = 1;
100+
var m = (_h = {},
101+
_h[an] = 5,
102+
_h[bn] = 6,
103+
_h);
104+
var um = (_j = {},
105+
_j[an] = 7,
106+
_j[bn] = 8,
107+
_j);
108+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
=== tests/cases/compiler/objectLiteralEnumPropertyNames.ts ===
2+
// Fixes #16887
3+
enum Strs {
4+
>Strs : Symbol(Strs, Decl(objectLiteralEnumPropertyNames.ts, 0, 0))
5+
6+
A = 'a',
7+
>A : Symbol(Strs.A, Decl(objectLiteralEnumPropertyNames.ts, 1, 11))
8+
9+
B = 'b'
10+
>B : Symbol(Strs.B, Decl(objectLiteralEnumPropertyNames.ts, 2, 12))
11+
}
12+
type TestStrs = { [key in Strs]: string }
13+
>TestStrs : Symbol(TestStrs, Decl(objectLiteralEnumPropertyNames.ts, 4, 1))
14+
>key : Symbol(key, Decl(objectLiteralEnumPropertyNames.ts, 5, 19))
15+
>Strs : Symbol(Strs, Decl(objectLiteralEnumPropertyNames.ts, 0, 0))
16+
17+
const x: TestStrs = {
18+
>x : Symbol(x, Decl(objectLiteralEnumPropertyNames.ts, 6, 5))
19+
>TestStrs : Symbol(TestStrs, Decl(objectLiteralEnumPropertyNames.ts, 4, 1))
20+
21+
[Strs.A]: 'xo',
22+
>Strs.A : Symbol(Strs.A, Decl(objectLiteralEnumPropertyNames.ts, 1, 11))
23+
>Strs : Symbol(Strs, Decl(objectLiteralEnumPropertyNames.ts, 0, 0))
24+
>A : Symbol(Strs.A, Decl(objectLiteralEnumPropertyNames.ts, 1, 11))
25+
26+
[Strs.B]: 'xe'
27+
>Strs.B : Symbol(Strs.B, Decl(objectLiteralEnumPropertyNames.ts, 2, 12))
28+
>Strs : Symbol(Strs, Decl(objectLiteralEnumPropertyNames.ts, 0, 0))
29+
>B : Symbol(Strs.B, Decl(objectLiteralEnumPropertyNames.ts, 2, 12))
30+
}
31+
const ux = {
32+
>ux : Symbol(ux, Decl(objectLiteralEnumPropertyNames.ts, 10, 5))
33+
34+
[Strs.A]: 'xo',
35+
>Strs.A : Symbol(Strs.A, Decl(objectLiteralEnumPropertyNames.ts, 1, 11))
36+
>Strs : Symbol(Strs, Decl(objectLiteralEnumPropertyNames.ts, 0, 0))
37+
>A : Symbol(Strs.A, Decl(objectLiteralEnumPropertyNames.ts, 1, 11))
38+
39+
[Strs.B]: 'xe'
40+
>Strs.B : Symbol(Strs.B, Decl(objectLiteralEnumPropertyNames.ts, 2, 12))
41+
>Strs : Symbol(Strs, Decl(objectLiteralEnumPropertyNames.ts, 0, 0))
42+
>B : Symbol(Strs.B, Decl(objectLiteralEnumPropertyNames.ts, 2, 12))
43+
}
44+
const y: TestStrs = {
45+
>y : Symbol(y, Decl(objectLiteralEnumPropertyNames.ts, 14, 5))
46+
>TestStrs : Symbol(TestStrs, Decl(objectLiteralEnumPropertyNames.ts, 4, 1))
47+
48+
['a']: 'yo',
49+
>'a' : Symbol(['a'], Decl(objectLiteralEnumPropertyNames.ts, 14, 21))
50+
51+
['b']: 'ye'
52+
>'b' : Symbol(['b'], Decl(objectLiteralEnumPropertyNames.ts, 15, 16))
53+
}
54+
const a = 'a';
55+
>a : Symbol(a, Decl(objectLiteralEnumPropertyNames.ts, 18, 5))
56+
57+
const b = 'b';
58+
>b : Symbol(b, Decl(objectLiteralEnumPropertyNames.ts, 19, 5))
59+
60+
const z: TestStrs = {
61+
>z : Symbol(z, Decl(objectLiteralEnumPropertyNames.ts, 20, 5))
62+
>TestStrs : Symbol(TestStrs, Decl(objectLiteralEnumPropertyNames.ts, 4, 1))
63+
64+
[a]: 'zo',
65+
>a : Symbol(a, Decl(objectLiteralEnumPropertyNames.ts, 18, 5))
66+
67+
[b]: 'ze'
68+
>b : Symbol(b, Decl(objectLiteralEnumPropertyNames.ts, 19, 5))
69+
}
70+
const uz = {
71+
>uz : Symbol(uz, Decl(objectLiteralEnumPropertyNames.ts, 24, 5))
72+
73+
[a]: 'zo',
74+
>a : Symbol(a, Decl(objectLiteralEnumPropertyNames.ts, 18, 5))
75+
76+
[b]: 'ze'
77+
>b : Symbol(b, Decl(objectLiteralEnumPropertyNames.ts, 19, 5))
78+
}
79+
80+
enum Nums {
81+
>Nums : Symbol(Nums, Decl(objectLiteralEnumPropertyNames.ts, 27, 1))
82+
83+
A,
84+
>A : Symbol(Nums.A, Decl(objectLiteralEnumPropertyNames.ts, 29, 11))
85+
86+
B
87+
>B : Symbol(Nums.B, Decl(objectLiteralEnumPropertyNames.ts, 30, 6))
88+
}
89+
type TestNums = { 0: number, 1: number }
90+
>TestNums : Symbol(TestNums, Decl(objectLiteralEnumPropertyNames.ts, 32, 1))
91+
92+
const n: TestNums = {
93+
>n : Symbol(n, Decl(objectLiteralEnumPropertyNames.ts, 34, 5))
94+
>TestNums : Symbol(TestNums, Decl(objectLiteralEnumPropertyNames.ts, 32, 1))
95+
96+
[Nums.A]: 1,
97+
>Nums.A : Symbol(Nums.A, Decl(objectLiteralEnumPropertyNames.ts, 29, 11))
98+
>Nums : Symbol(Nums, Decl(objectLiteralEnumPropertyNames.ts, 27, 1))
99+
>A : Symbol(Nums.A, Decl(objectLiteralEnumPropertyNames.ts, 29, 11))
100+
101+
[Nums.B]: 2
102+
>Nums.B : Symbol(Nums.B, Decl(objectLiteralEnumPropertyNames.ts, 30, 6))
103+
>Nums : Symbol(Nums, Decl(objectLiteralEnumPropertyNames.ts, 27, 1))
104+
>B : Symbol(Nums.B, Decl(objectLiteralEnumPropertyNames.ts, 30, 6))
105+
}
106+
const un = {
107+
>un : Symbol(un, Decl(objectLiteralEnumPropertyNames.ts, 38, 5))
108+
109+
[Nums.A]: 3,
110+
>Nums.A : Symbol(Nums.A, Decl(objectLiteralEnumPropertyNames.ts, 29, 11))
111+
>Nums : Symbol(Nums, Decl(objectLiteralEnumPropertyNames.ts, 27, 1))
112+
>A : Symbol(Nums.A, Decl(objectLiteralEnumPropertyNames.ts, 29, 11))
113+
114+
[Nums.B]: 4
115+
>Nums.B : Symbol(Nums.B, Decl(objectLiteralEnumPropertyNames.ts, 30, 6))
116+
>Nums : Symbol(Nums, Decl(objectLiteralEnumPropertyNames.ts, 27, 1))
117+
>B : Symbol(Nums.B, Decl(objectLiteralEnumPropertyNames.ts, 30, 6))
118+
}
119+
const an = 0;
120+
>an : Symbol(an, Decl(objectLiteralEnumPropertyNames.ts, 42, 5))
121+
122+
const bn = 1;
123+
>bn : Symbol(bn, Decl(objectLiteralEnumPropertyNames.ts, 43, 5))
124+
125+
const m: TestNums = {
126+
>m : Symbol(m, Decl(objectLiteralEnumPropertyNames.ts, 44, 5))
127+
>TestNums : Symbol(TestNums, Decl(objectLiteralEnumPropertyNames.ts, 32, 1))
128+
129+
[an]: 5,
130+
>an : Symbol(an, Decl(objectLiteralEnumPropertyNames.ts, 42, 5))
131+
132+
[bn]: 6
133+
>bn : Symbol(bn, Decl(objectLiteralEnumPropertyNames.ts, 43, 5))
134+
}
135+
const um = {
136+
>um : Symbol(um, Decl(objectLiteralEnumPropertyNames.ts, 48, 5))
137+
138+
[an]: 7,
139+
>an : Symbol(an, Decl(objectLiteralEnumPropertyNames.ts, 42, 5))
140+
141+
[bn]: 8
142+
>bn : Symbol(bn, Decl(objectLiteralEnumPropertyNames.ts, 43, 5))
143+
}
144+

0 commit comments

Comments
 (0)