-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Expand file tree
/
Copy pathenumKeysAsComputedPropertiesWithBracketNotation.js
More file actions
119 lines (99 loc) · 2.39 KB
/
enumKeysAsComputedPropertiesWithBracketNotation.js
File metadata and controls
119 lines (99 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//// [tests/cases/compiler/enumKeysAsComputedPropertiesWithBracketNotation.ts] ////
//// [enumKeysAsComputedPropertiesWithBracketNotation.ts]
// Test that enum keys accessed with bracket notation can be used as computed properties
// Regression test for https://github.com/microsoft/TypeScript/issues/25083
enum Type {
Foo = 'foo',
'3x14' = '3x14'
}
// All of these should work
type TypeMap = {
[Type.Foo]: string; // Property access
[Type['3x14']]: number; // Element access with non-identifier key
}
// Bracket notation with identifier key should also work (equivalent to property access)
type TypeMap2 = {
[Type['Foo']]: boolean;
}
// Nested element access should work
const nested = {
inner: {
key: 'hello' as const
}
};
type TypeMap3 = {
[nested.inner.key]: string;
}
// Element access on deeply nested path
type TypeMap4 = {
[nested['inner']['key']]: string;
}
// Mixed chain: element access followed by property access
type TypeMap5 = {
[nested['inner'].key]: string;
}
// Mixed chain: property access followed by element access
type TypeMap6 = {
[nested.inner['key']]: string;
}
// Complex mixed chain
const deep = {
a: {
b: {
c: {
d: 'value' as const
}
}
}
};
type TypeMap7 = {
[deep.a['b'].c['d']]: string;
}
type TypeMap8 = {
[deep['a'].b['c'].d]: string;
}
// Parenthesized expressions
type TypeMap9 = {
[(nested.inner).key]: string;
}
type TypeMap10 = {
[(nested['inner']).key]: string;
}
type TypeMap11 = {
[(nested).inner.key]: string;
}
// Parenthesized keys in element access
type TypeMap12 = {
[nested[('inner')]['key']]: string;
}
type TypeMap13 = {
[nested['inner'][('key')]]: string;
}
type TypeMap14 = {
[deep[('a')][('b')].c['d']]: string;
}
//// [enumKeysAsComputedPropertiesWithBracketNotation.js]
"use strict";
// Test that enum keys accessed with bracket notation can be used as computed properties
// Regression test for https://github.com/microsoft/TypeScript/issues/25083
var Type;
(function (Type) {
Type["Foo"] = "foo";
Type["3x14"] = "3x14";
})(Type || (Type = {}));
// Nested element access should work
var nested = {
inner: {
key: 'hello'
}
};
// Complex mixed chain
var deep = {
a: {
b: {
c: {
d: 'value'
}
}
}
};