1+ //// [enumClassification.ts]
2+ // An enum type where each member has no initializer or an initializer that specififes
3+ // a numeric literal, a string literal, or a single identifier naming another member in
4+ // the enum type is classified as a literal enum type. An enum type that doesn't adhere
5+ // to this pattern is classified as a numeric enum type.
6+
7+ // Examples of literal enum types
8+
9+ enum E01 {
10+ A
11+ }
12+
13+ enum E02 {
14+ A = 123
15+ }
16+
17+ enum E03 {
18+ A = "hello"
19+ }
20+
21+ enum E04 {
22+ A ,
23+ B ,
24+ C
25+ }
26+
27+ enum E05 {
28+ A ,
29+ B = 10 ,
30+ C
31+ }
32+
33+ enum E06 {
34+ A = "one" ,
35+ B = "two" ,
36+ C = "three"
37+ }
38+
39+ enum E07 {
40+ A ,
41+ B ,
42+ C = "hi" ,
43+ D = 10 ,
44+ E ,
45+ F = "bye"
46+ }
47+
48+ enum E08 {
49+ A = 10 ,
50+ B = "hello" ,
51+ C = A ,
52+ D = B ,
53+ E = C ,
54+ }
55+
56+ // Examples of numeric enum types with only constant members
57+
58+ enum E10 { }
59+
60+ enum E11 {
61+ A = + 0 ,
62+ B ,
63+ C
64+ }
65+
66+ enum E12 {
67+ A = 1 << 0 ,
68+ B = 1 << 1 ,
69+ C = 1 << 2
70+ }
71+
72+ // Examples of numeric enum types with constant and computed members
73+
74+ enum E20 {
75+ A = "foo" . length ,
76+ B = A + 1 ,
77+ C = + "123" ,
78+ D = Math . sin ( 1 )
79+ }
80+
81+
82+ //// [enumClassification.js]
83+ // An enum type where each member has no initializer or an initializer that specififes
84+ // a numeric literal, a string literal, or a single identifier naming another member in
85+ // the enum type is classified as a literal enum type. An enum type that doesn't adhere
86+ // to this pattern is classified as a numeric enum type.
87+ // Examples of literal enum types
88+ var E01 ;
89+ ( function ( E01 ) {
90+ E01 [ E01 [ "A" ] = 0 ] = "A" ;
91+ } ) ( E01 || ( E01 = { } ) ) ;
92+ var E02 ;
93+ ( function ( E02 ) {
94+ E02 [ E02 [ "A" ] = 123 ] = "A" ;
95+ } ) ( E02 || ( E02 = { } ) ) ;
96+ var E03 ;
97+ ( function ( E03 ) {
98+ E03 [ "A" ] = "hello" ;
99+ } ) ( E03 || ( E03 = { } ) ) ;
100+ var E04 ;
101+ ( function ( E04 ) {
102+ E04 [ E04 [ "A" ] = 0 ] = "A" ;
103+ E04 [ E04 [ "B" ] = 1 ] = "B" ;
104+ E04 [ E04 [ "C" ] = 2 ] = "C" ;
105+ } ) ( E04 || ( E04 = { } ) ) ;
106+ var E05 ;
107+ ( function ( E05 ) {
108+ E05 [ E05 [ "A" ] = 0 ] = "A" ;
109+ E05 [ E05 [ "B" ] = 10 ] = "B" ;
110+ E05 [ E05 [ "C" ] = 11 ] = "C" ;
111+ } ) ( E05 || ( E05 = { } ) ) ;
112+ var E06 ;
113+ ( function ( E06 ) {
114+ E06 [ "A" ] = "one" ;
115+ E06 [ "B" ] = "two" ;
116+ E06 [ "C" ] = "three" ;
117+ } ) ( E06 || ( E06 = { } ) ) ;
118+ var E07 ;
119+ ( function ( E07 ) {
120+ E07 [ E07 [ "A" ] = 0 ] = "A" ;
121+ E07 [ E07 [ "B" ] = 1 ] = "B" ;
122+ E07 [ "C" ] = "hi" ;
123+ E07 [ E07 [ "D" ] = 10 ] = "D" ;
124+ E07 [ E07 [ "E" ] = 11 ] = "E" ;
125+ E07 [ "F" ] = "bye" ;
126+ } ) ( E07 || ( E07 = { } ) ) ;
127+ var E08 ;
128+ ( function ( E08 ) {
129+ E08 [ E08 [ "A" ] = 10 ] = "A" ;
130+ E08 [ "B" ] = "hello" ;
131+ E08 [ E08 [ "C" ] = 10 ] = "C" ;
132+ E08 [ "D" ] = "hello" ;
133+ E08 [ E08 [ "E" ] = 10 ] = "E" ;
134+ } ) ( E08 || ( E08 = { } ) ) ;
135+ // Examples of numeric enum types with only constant members
136+ var E10 ;
137+ ( function ( E10 ) {
138+ } ) ( E10 || ( E10 = { } ) ) ;
139+ var E11 ;
140+ ( function ( E11 ) {
141+ E11 [ E11 [ "A" ] = 0 ] = "A" ;
142+ E11 [ E11 [ "B" ] = 1 ] = "B" ;
143+ E11 [ E11 [ "C" ] = 2 ] = "C" ;
144+ } ) ( E11 || ( E11 = { } ) ) ;
145+ var E12 ;
146+ ( function ( E12 ) {
147+ E12 [ E12 [ "A" ] = 1 ] = "A" ;
148+ E12 [ E12 [ "B" ] = 2 ] = "B" ;
149+ E12 [ E12 [ "C" ] = 4 ] = "C" ;
150+ } ) ( E12 || ( E12 = { } ) ) ;
151+ // Examples of numeric enum types with constant and computed members
152+ var E20 ;
153+ ( function ( E20 ) {
154+ E20 [ E20 [ "A" ] = "foo" . length ] = "A" ;
155+ E20 [ E20 [ "B" ] = E20 . A + 1 ] = "B" ;
156+ E20 [ E20 [ "C" ] = + "123" ] = "C" ;
157+ E20 [ E20 [ "D" ] = Math . sin ( 1 ) ] = "D" ;
158+ } ) ( E20 || ( E20 = { } ) ) ;
159+
160+
161+ //// [enumClassification.d.ts]
162+ declare enum E01 {
163+ A = 0 ,
164+ }
165+ declare enum E02 {
166+ A = 123 ,
167+ }
168+ declare enum E03 {
169+ A = hello ,
170+ }
171+ declare enum E04 {
172+ A = 0 ,
173+ B = 1 ,
174+ C = 2 ,
175+ }
176+ declare enum E05 {
177+ A = 0 ,
178+ B = 10 ,
179+ C = 11 ,
180+ }
181+ declare enum E06 {
182+ A = one ,
183+ B = two ,
184+ C = three ,
185+ }
186+ declare enum E07 {
187+ A = 0 ,
188+ B = 1 ,
189+ C = hi ,
190+ D = 10 ,
191+ E = 11 ,
192+ F = bye ,
193+ }
194+ declare enum E08 {
195+ A = 10 ,
196+ B = hello ,
197+ C = 10 ,
198+ D = hello ,
199+ E = 10 ,
200+ }
201+ declare enum E10 {
202+ }
203+ declare enum E11 {
204+ A = 0 ,
205+ B = 1 ,
206+ C = 2 ,
207+ }
208+ declare enum E12 {
209+ A = 1 ,
210+ B = 2 ,
211+ C = 4 ,
212+ }
213+ declare enum E20 {
214+ A ,
215+ B ,
216+ C ,
217+ D ,
218+ }
219+
220+
221+ //// [DtsFileErrors]
222+
223+
224+ tests / cases / conformance / enums / enumClassification . d . ts ( 8 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
225+ tests / cases / conformance / enums / enumClassification . d . ts ( 21 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
226+ tests / cases / conformance / enums / enumClassification . d . ts ( 22 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
227+ tests / cases / conformance / enums / enumClassification . d . ts ( 23 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
228+ tests / cases / conformance / enums / enumClassification . d . ts ( 28 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
229+ tests / cases / conformance / enums / enumClassification . d . ts ( 31 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
230+ tests / cases / conformance / enums / enumClassification . d . ts ( 35 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
231+ tests / cases / conformance / enums / enumClassification . d . ts ( 37 , 9 ) : error TS1066 : In ambient enum declarations member initializer must be constant expression .
232+
233+
234+ = === tests / cases / conformance / enums / enumClassification . d . ts ( 8 errors ) === =
235+ declare enum E01 {
236+ A = 0 ,
237+ }
238+ declare enum E02 {
239+ A = 123 ,
240+ }
241+ declare enum E03 {
242+ A = hello ,
243+ ~ ~ ~ ~ ~
244+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
245+ }
246+ declare enum E04 {
247+ A = 0 ,
248+ B = 1 ,
249+ C = 2 ,
250+ }
251+ declare enum E05 {
252+ A = 0 ,
253+ B = 10 ,
254+ C = 11 ,
255+ }
256+ declare enum E06 {
257+ A = one ,
258+ ~ ~ ~
259+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
260+ B = two ,
261+ ~ ~ ~
262+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
263+ C = three ,
264+ ~ ~ ~ ~ ~
265+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
266+ }
267+ declare enum E07 {
268+ A = 0 ,
269+ B = 1 ,
270+ C = hi ,
271+ ~ ~
272+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
273+ D = 10 ,
274+ E = 11 ,
275+ F = bye ,
276+ ~ ~ ~
277+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
278+ }
279+ declare enum E08 {
280+ A = 10 ,
281+ B = hello ,
282+ ~ ~ ~ ~ ~
283+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
284+ C = 10 ,
285+ D = hello ,
286+ ~ ~ ~ ~ ~
287+ ! ! ! error TS1066 : In ambient enum declarations member initializer must be constant expression .
288+ E = 10 ,
289+ }
290+ declare enum E10 {
291+ }
292+ declare enum E11 {
293+ A = 0 ,
294+ B = 1 ,
295+ C = 2 ,
296+ }
297+ declare enum E12 {
298+ A = 1 ,
299+ B = 2 ,
300+ C = 4 ,
301+ }
302+ declare enum E20 {
303+ A ,
304+ B ,
305+ C ,
306+ D ,
307+ }
308+
0 commit comments