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.

export enum Sizes {
    s,
    m,
    l,
    xl
}

  1. 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:

console.log(Sizes.s); // 0 is returned
let size: Sizes; // setting our "Sizes" ENUM type for the variable 
size = Sizes.s; // valid assignment
size = "l"; // ERROR, it is a numeric ENUM
size = 0; // valid assignment, we can assign anything from 0 to 3 in our case

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.

  1. 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:

  1. 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;

  2. 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. БСрСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ свойства, Ссли это число, Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ инкрСмСнтируСтся +1 ΠΈ присваиваСтся;

  2. Если ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся строкой, Ρ‚ΠΎ 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

  1. Literal Types (Π±Ρ‹Π»ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ Π²Ρ‹ΡˆΠ΅):

let fontWeight: 500 | 600 | 700 | "bold" = "bold";Когда ΠΌΡ‹ присвоим "bold" этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, всС Ρ‚ΠΈΠΏΡ‹ Π²Ρ‹Ρ€Π΅ΠΆΡƒΡ‚ΡŒΡΡ, Ρ‚.Π΅. Π½ΠΈΠΊΠ°ΠΊΠΈΡ… послСдствий ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΏ.ΠΊΠΎΠ΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ. Π’ΠΈΠΏΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ лишь Π΄ΠΎ компиляции. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ENUM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°ΠΆΠ΅ послС компиляции TS Π² JS принСсСт с собой ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

  1. использованиС as const

Если Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ENUM, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ ΠΊΠ°ΠΊ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚ΠΎ константный ENUM Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ (Ρ‚.ΠΊ. ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ Π½Π΅ΠΌΡƒ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹).Π”Π°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ENUM этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ автозаполнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Π±ΡƒΠ΄Π΅ΠΌ чСстны, Π½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. ΠŸΠΎΡ‡Ρ‚ΠΈ всСгда ENUM это Π½Π°Π±ΠΎΡ€ свойств со строковыми значСниями. Если ΠΌΡ‹ объявим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со свойствами - Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ Ссли ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡƒ as const, Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ станСт Π·Π°Ρ„Ρ€ΠΈΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚.Π΅. всС Π΅Π³ΠΎ свойства Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ (readonly), Ρ‚.Π΅. ΠΈΡ… нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π’ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ нСльзя Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ - Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… свойств, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ измСнСния свойств ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…. Π˜Ρ‚ΠΎΠ³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ as const ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ свойств, Ρ‚.Π΅. пСрСчислСниС. Для Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡ… Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ это Π½Π°Π±ΠΎΡ€ настоящих констант. Когда Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ просто Ρ‚ΠΈΠΏΡ‹, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ literal types. Для as const Π½Π΅ создаСтся IIFE function ΠΊΠ°ΠΊ для ENUM, это простой классичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ сравнСнии строк, ΠΏΡ€ΠΈ присвоСнии строк Ρƒ ENUM ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ это Π½Π΅ просто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π΅Ρ‰Π΅ ΠΈ Ρ‚ΠΈΠΏ. А Π² случаС с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ - Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Last updated