ENUMs
ENUM is a set of values. This is something between a real object and a type. It is very important to understand that the Types and all TypeScript syntax are cut out after compilation from all resulting files. After compiling our code from TypeScript to JavaScript, we can open the generated file and we will see that there is no information about any TypeScript logic that we have been writing so diligently. The browser simply does not know how to work with any TypeScript-specific syntax. But ENUM is very special, it is something in between, i.e. somewhere on the verge - it seems to be both a type and an object.
Numeric ENUMs
If you would write the code for ENUM in any Integrated Development Environment (IDE) that supports TypeScript, you will see that your IDE automatically enumerates the values of ENUM in ascending order. As a result, you can access the values of ENUM that have been created (s, m, l, xl) or the numeric corresponding values that TS set for us. Thus, ENUMs are reversible.
In fact, ENUM is an object whose properties will be the ones that we set, and the property values are the values ββthat TS will set automatically (in the case we did not explicitly set them). When we access a property, the value will be returned:
It is important to understand that ENUM is not only a type, but it is also an object.
In TypeScript Playground you can see our TS code on the left side of the screen, and the JS code that we get after compilation. We can see that after compilation we get all these Number values that have been assigned in ascending order to every single property of our ENUM-object.
But if we would explicitly assign values, then the default numeration will shift, and each subsequent property value will be calculated by incrementing the previous value.
Automatic incrementing of property values occurs only with numeric values. This reverse mapping nature of numeric ENUMs is an important property which means that we can access the internals of ENUMs both through a property and through a property value (whether it is a default property value or an explicitly assigned one).
2. String ENUMs
String ENUMs are ENUMs whose values are strings.
If we set at least one property value to a string value and leave subsequent properties without a value at all, then there will be an error - Enum member must have initializer. If the ENUM element has no value, then it looks at the value of the previous one. If the previous property value is a number, then the value will simply be incremented (+1). But if that value is a string, then there will be an error and we will need to manually write the values.
Thus, if at least one property value is set for the string ENUM, all other properties have to be manually set as well.
Mixed ENUM
If some of the property values of ENUM were strings, and we specify a numeric value for one of the elements in Mixed ENUM, then all subsequent property values will be numbered using the increment (+1) again.
In the images above we can see that the first 2 property values are strings, we set them up, and the 3rd one is numeric, so TypeScript can help us to assign all subsequent values by incrementation as it always does for all numeric ENUMs.
Thus, we can conclude:
only numeric ENUMs have reversibility (reverse mapping) and auto-computation of properties;
string ENUMs do not have reversibility and auto-computation of properties;
How the property value's auto-computing for numeric ENUM works:
The value of the previous property is checked, if it is a number, then the current value is incremented by +1 and assigned to the current property of the object;
If the previous value is a string, then TS requires you to fill in the current value manually;
In the picture from TS Playground above, we can see that after code compilation, an immediately called function (IIFE - Immediately Invoked Function Expression) is created.
ΠΠΎ ΠΏΡΠΈ ΡΠΌΠ΅ΡΠ°Π½Π½ΠΎΠΌ ΡΠΈΠΏΠ΅, Π΅ΡΠ»ΠΈ ΠΌΡ Π²Π½ΠΎΠ²Ρ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎ Π²Π½ΠΎΠ²Ρ Π±ΡΠ΄ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Ρ/ΡΠ°Π·Π½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° +1 Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½ΠΈΠΆΠ΅ΡΡΠΎΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ².ΠΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΈΠ· TS playground ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌ Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ, ΡΡΠΎ
ΡΠ΅Π²Π΅ΡΡΠΈΠ²Π½ΠΎΡΡΡΡ ΠΈ Π°Π²ΡΠΎΠ²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ENUM;
ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ENUM ΡΠ΅Π²Π΅ΡΡΠΈΠ²Π½ΠΎΡΡΡΡ ΠΈ Π°Π²ΡΠΎΠ²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ² Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡΡ;
Π Π°Π±ΠΎΡΠ° Π°Π²ΡΠΎΠ²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Ρ ENUM:
ΠΠ΅ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ, ΡΠΎ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΡΡΡ +1 ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ;
ΠΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎ TS ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΡΠ½ΡΡ;
ΠΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π²ΡΡΠ΅ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ (IIFE - Immediately Invoked Function Expression).
3. Π‘ΠΌΠ΅ΡΠ°Π½Π½ΡΠ΅ ENUM
ENUM ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΌΠ΅ΡΠ°Π½Π½ΡΠΌΠΈ, Π½ΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ±ΠΎΡΠ½Π°Ρ ΡΠΎΠ»ΡΠ½ΠΊΠ° Π±Π»ΠΈΠΆΠ΅ ΠΊ any. ΠΡΡΡΠ΅ ΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠΎ Π² ΡΠ΅Π»ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ENUM ΠΏΠ΅ΡΠ΅ΠΎΡΠ΅Π½Π΅Π½ΠΎ.
4. ΠΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ ENUM
ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ ENUM?
ΠΡΠ»ΠΈ ΠΌΡ ΡΠ±Π΅ΡΠ΅ΠΌ const, ΡΠΎ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ENUM Π½Π΅ΡΠ΅Ρ Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΡΡΡ ΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠΎΡΠ½ΠΈ ENUMs Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΡΠΎ ΡΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². Π Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΠ»ΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ°ΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Ρ ΡΠ°Π½ΠΈΡΡ, ΡΠΎ Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ENUM ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡΡΡΠ΅ ΡΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ ENUM, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² JS ΠΈ Π½Π°Ρ bundle Π±ΡΠ΄Π΅Ρ Π»Π΅Π³ΡΠ΅. ΠΠΎ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ ENUMs Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ - Ρ.ΠΊ. ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ, ΡΠΎ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΊΠΈΠΌ ENUM ΠΊΠ°ΠΊ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π½Π΅Π»ΡΠ·Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Object.keys()/Object.values()/Object.entries(), etc, Ρ.ΠΊ. ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΠΏΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠΌ ENUM ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠΎ ΡΡΡΠΈ Π²ΡΠ΅ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ ENUM - ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ.
ΠΡΠΎΠ³ΠΎ: Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ENUM, Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π²ΠΎΠΏΡΠΎΡ - ΠΠ°ΡΠ΅ΠΌ?
ΠΡΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ - ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ const enum;
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ENUM ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎ Π½Π΅ΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ENUM, Π±Π΅Π· const.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ENUM:
ΠΠ²ΠΈΠ΄Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΡΠΈΠΏ ΡΡΠΎ ΠΈΠ»ΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ENUM, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ. Π-Ρ: Ρ GraphQL ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΠΈ ΡΠ°Π½ΡΡΠ΅ Π±ΡΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Babel - ΡΠ°Π½ΡΡΠ΅ Babel Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», ΠΊΠ°ΠΊ ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ - ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΎ ΠΈΠ»ΠΈ ΡΠΈΠΏΡ.
Π’Π°ΠΊΠΆΠ΅ ENUM Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏ. ΠΊΠΎΠ΄Π°, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡ ΡΠΎΡΠ½ΠΈ, ΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π°. ΠΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ΅Π½ΠΈΠ΅ Π±Π°Π½Π΄Π»Π° Π΄Π°Π΅Ρ ΠΏΡΠΈΡΠΎΡΡ Π² ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ°ΠΏΠ°Ρ - Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π½Π΅ ΠΏΡΡΠΌΠ°Ρ. ΠΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ Π±Π°Π½Π΄Π», Π° Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π² ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠΆΠ΅ Π½Π΅Ρ.
Π‘ΠΠΠ‘ΠΠΠ« ΠΠ ΠΠ‘ΠΠΠΠ¬ΠΠΠΠΠ’Π¬ ENUM
Literal Types (Π±ΡΠ»ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π½Ρ Π²ΡΡΠ΅):
let fontWeight: 500 | 600 | 700 | "bold" = "bold";ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠΈΡΠ²ΠΎΠΈΠΌ "bold" ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²ΡΠ΅ ΡΠΈΠΏΡ Π²ΡΡΠ΅ΠΆΡΡΡΡΡ, Ρ.Π΅. Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΏ.ΠΊΠΎΠ΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ. Π’ΠΈΠΏΡ Π±ΡΠ΄ΡΡ Π»ΠΈΡΡ Π΄ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ENUM, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ TS Π² JS ΠΏΡΠΈΠ½Π΅ΡΠ΅Ρ Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ as const
ΠΡΠ»ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ENUM, ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌ ΠΊΠ°ΠΊ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ ENUM Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ (Ρ.ΠΊ. ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊ Π½Π΅ΠΌΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ).ΠΠ°, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ENUM ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π΄Π°Π΅Ρ Π½Π°ΠΌ Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², Π±ΡΠ΄Π΅ΠΌ ΡΠ΅ΡΡΠ½Ρ, Π½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ENUM ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ - ΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡ as const, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°Π½Π΅Ρ Π·Π°ΡΡΠΈΠΆΠ΅Π½Π½ΡΠΌ, Ρ.Π΅. Π²ΡΠ΅ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π±ΡΠ΄ΡΡ Π·Π°ΡΠΈΡΠ΅Π½Ρ (readonly), Ρ.Π΅. ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ. Π ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ - Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π½ΠΎΠ²ΡΡ ΡΠ²ΠΎΠΉΡΡΠ², ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ . ΠΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ as const ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π½Π΅ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ², Ρ.Π΅. ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½ΠΎ ΡΡΠΎ Π½Π°Π±ΠΎΡ Π½Π°ΡΡΠΎΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ. ΠΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠΏΡ, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ literal types. ΠΠ»Ρ as const Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ IIFE function ΠΊΠ°ΠΊ Π΄Π»Ρ ENUM, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΡΡΡΠΎΠΊ, ΠΏΡΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠΈ ΡΡΡΠΎΠΊ Ρ ENUM ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° Π΅ΡΠ΅ ΠΈ ΡΠΈΠΏ. Π Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ - Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
Last updated