string/number/boolean, any vs unknown, null/undefined va strictNullChecks, void va never — har biri chuqur misollar, chegara holatlar va test/debugging mashqlari bilan.
TypeScript'ning eng ko'p ishlatiladigan, fundamental tiplari. Bu bob boshqalarga qaraganda kengroq — har bir tipni misollar, chegara holatlar va real-world qo'llanilishi bilan chuqur yoritadi.
Bu uchtasi — JavaScript'dagi eng oddiy primitiv qiymatlarning TypeScript'dagi tip nomlari.
index.tsTypeScriptlet name: string = "Abbosbek";let age: number = 26;let isActive: boolean = true;// Template literal bilan ham ishlaydilet greeting: string = `Salom, ${name}!`;
string, number, boolean — TypeScript'ning o'rnatilgan (primitive) tip nomlari, kichik harf bilan yoziladi. String, Number, Boolean (katta harf bilan) — JavaScript'ning "wrapper object" turlari bo'lib, ular deyarli hech qachon ishlatilmasligi kerak.
⚠️ Common Mistake
index.tsTypeScriptlet name: String = "Abbosbek"; // ISHLAYDI, lekin noto'g'ri amaliyot
Katta harfli String — obyekt wrapper turi, u ko'proq murakkablik va potentsial muammolar keltirib chiqaradi. Har doim kichik harfli string ishlatilishi kerak.
any — TypeScript'ning tip tekshiruvini butunlay o'chiradigan "qochish yo'li". unknown — xavfsizroq alternativa: qiymat noma'lum turda, lekin uni ishlatishdan oldin tip tekshirishga majbur qiladi.
index.tsTypeScriptlet data: any = "matn";data = 42; // muammosizdata.toUpperCase(); // compile vaqtida xato bermaydi, lekin runtime'da xato beradi (42.toUpperCase yo'q)!let value: unknown = "matn";value = 42; // muammosizvalue.toUpperCase(); // XATO: 'value' is of type 'unknown'if (typeof value === "string") {value.toUpperCase(); // Endi xavfsiz — TypeScript value'ni string deb "biladi"}
⚠️ Common Mistake
anyni "tez yechim" sifatida har qanday tip xatosidan qochish uchun ishlatish — bu TypeScript ishlatishning butun maqsadini yo'qqa chiqaradi. any — "TypeScript'ni o'chirish tugmasi" kabi, faqat haqiqatan zarur bo'lgan (masalan eski kutubxona bilan integratsiya) holatlarda ishlatilishi kerak.
JavaScript'da ikkita "bo'sh qiymat" bor: null (ataylab "qiymat yo'q" deb belgilash) va undefined (hali qiymat berilmagan). TypeScript'da strictNullChecks yoqilgan bo'lsa, ular boshqa tiplarga avtomatik "aralashib" ketmaydi.
index.tsTypeScript// strictNullChecks: true bilanlet name: string = null; // XATO: Type 'null' is not assignable to type 'string'let name: string | null = null; // TO'G'RI — union type orqali ruxsat berilganfunction greet(name: string | null) {if (name === null) {return "Salom, mehmon!";}return `Salom, ${name}!`;}
void — funksiya hech narsa qaytarmasligini bildiradi. never — funksiya HECH QACHON normal tugamasligini (masalan har doim xato tashlashi yoki cheksiz davom etishi) bildiradi.
index.tsTypeScriptfunction logMessage(message: string): void {console.log(message);// return qiymati yo'q (yoki return; bo'lishi mumkin)}function throwError(message: string): never {throw new Error(message);// Bu funksiya HECH QACHON normal qaytmaydi}function infiniteLoop(): never {while (true) {}}
Task: Ism (string), yosh (number) va aktivlik holati (boolean) uchun to'g'ri tipланган o'zgaruvchilar yarating.
Task: API'dan kelgan, turi oldindan noma'lum ma'lumotni qabul qiluvchi funksiya yozing, unknown tipidan foydalanib, uni xavfsiz tekshiring.
Task: Har doim xato tashlaydigan assertNever yordamchi funksiyasini never tipi bilan yozing.
index.tsTypeScript// tsconfig.json: "strict": truelet username: string;console.log(username.toUpperCase());
🧠 Think first! Bu compile vaqtida xato beradimi?
<details> <summary>Answer</summary> Ha, xato beradi: `Variable 'username' is used before being assigned`.Why?
strict rejimida (aniqrog'i strictNullChecks va strictPropertyInitialization bilan bog'liq tekshiruvlar), TypeScript o'zgaruvchi qiymat berilmasdan ishlatilishini kuzatadi va oldini oladi.
index.tsTypeScriptfunction processData(data: any) {return data.value.toUpperCase();}processData({ value: 42 });
Your Task: Bu kod compile vaqtida xato bermaydi, lekin runtime'da xato beradi. Nega, va anyning bu yerdagi muammosi nimada?
string, number, boolean — asosiy primitiv tiplar (kichik harf bilan). any — tip tekshiruvini o'chiradi (ehtiyot bo'lish kerak), unknown — xavfsizroq muqobil. strictNullChecks — null/undefinedning nazoratsiz aralashib ketishini oldini oladi. void — qiymat qaytarmaydi, never — hech qachon normal tugamaydi.
string, number, boolean)anydan iloji boricha qoching, unknown ko'proq xavfsizstrictNullChecks — yangi loyihalar uchun tavsiya etiladinever — "bu yerga hech qachon yetib kelinmaydi" degan kuchli signalindex.tsTypeScriptlet s: string = "matn";let n: number = 42;let b: boolean = true;let u: unknown = getValue();let nl: string | null = null;function log(): void { console.log("x"); }function fail(): never { throw new Error("x"); }
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 / 3 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: