Numeric va string enum'lar, const enum, hamda zamonaviy union type alternativasi va numeric enum'larning xavfsizlik zaifligi — test va debugging mashqlari bilan.
Enum (enumeration) — bir-biriga bog'liq, nomlangan konstantalar to'plamini belgilash uchun TypeScript'ga xos maxsus tur.
index.tsTypeScriptenum Direction {Up, // 0Down, // 1Left, // 2Right, // 3}let move: Direction = Direction.Up;console.log(move); // 0console.log(Direction[0]); // "Up" — teskari (reverse) mapping
Standart holatda, numeric enum'ning birinchi a'zosi 0dan boshlanadi, keyingilari avtomatik oshib boradi.
index.tsTypeScriptenum Status {Active = "ACTIVE",Inactive = "INACTIVE",Pending = "PENDING",}function setStatus(status: Status) {console.log(status);}setStatus(Status.Active); // "ACTIVE"
💡 Key Idea
String enum'lar — numeric enum'larga qaraganda ko'proq tavsiya etiladi, chunki ularning qiymatlari o'qishga tushunarli (debug qilishda konsolda 0 emas, "ACTIVE" ko'rinadi) va tasodifiy noto'g'ri son bilan almashtirilishga kamroq moyil.
index.tsTypeScriptconst enum Direction2 {Up,Down,}// const enum — compile vaqtida "inline" qilinadi, qo'shimcha JS kod generatsiya qilmaydi (ko'proq samarali)// Zamonaviy alternativa: union typetype Status2 = "active" | "inactive" | "pending";
⚠️ Common Mistake
Ko'p zamonaviy TypeScript loyihalari (jumladan TypeScript'ning rasmiy tavsiyalari) — enum o'rniga string literal union type'larni afzal ko'radi, chunki ular soddaroq, kamroq "sehrli" xatti-harakatga ega va bundle hajmini oshirmaydi.
Task: Kartaning to'rt tomonini (North, South, East, West) ifodalovchi string enum yarating.
Task: Enum o'rniga union type ishlatib, xuddi shu "status" mantig'ini qayta yozing va ikkalasini solishtiring.
index.tsTypeScriptenum Color { Red, Green, Blue }function paint(color: Color) {console.log(`Rang: ${color}`);}paint(5); // ?
Your Task: paint(5) compile vaqtida xato beradimi?
Enum — bog'liq konstantalar guruhini nomlash uchun. Numeric enum'lar — xavfsizlik nuqtai nazaridan zaifroq (istalgan sonni qabul qiladi). String enum'lar — tushunarliroq va xavfsizroq. Zamonaviy loyihalarda ko'pincha string literal union type'lar enum o'rniga afzal ko'riladi.
index.tsTypeScriptenum Status { Active = "ACTIVE", Inactive = "INACTIVE" }type StatusU = "active" | "inactive"; // zamonaviy alternativa
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 2 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: