Massiv tiplarini belgilash, readonly massivlar, tuple types (aniq uzunlik/tur ketma-ketligi) va ularning real-world (masalan useState) qo'llanilishi — chuqur test va debugging mashqlari bilan.
TypeScript massivlarni ikki xil, kuchli tarzda tiplashga imkon beradi: oddiy (bir turdagi elementlar) massivlar va tuple'lar (aniq uzunlik va tur ketma-ketligiga ega massivlar).
Massiv tipini ikki xil sintaksis bilan yozish mumkin: Type[] yoki Array<Type> — ular funksional jihatdan bir xil.
index.tsTypeScriptlet names: string[] = ["Ali", "Vali"];let scores: Array<number> = [90, 85, 78];// Union type massivlarlet mixed: (string | number)[] = ["Ali", 25, "Vali"];// Ichma-ich massivlarlet matrix: number[][] = [[1, 2], [3, 4]];
⚠️ Common Mistake
(string | number)[] bilan string | number[] orasidagi farqni chalkashtirish. Birinchisi — har bir elementi string YOKI number bo'lishi mumkin bo'lgan massiv. Ikkinchisi — YOKI stringning o'zi, YOKI number[] massivi (butunlay boshqa narsa!).
index.tsTypeScriptlet colors: readonly string[] = ["red", "green", "blue"];colors.push("yellow"); // XATO: Property 'push' does not exist on type 'readonly string[]'colors[0] = "black"; // XATO: Index signature in type 'readonly string[]' only permits reading// Alternativ sintaksislet colors2: ReadonlyArray<string> = ["red", "green"];
💡 Key Idea
readonly string[] — PART 3'da ko'rgan obyekt readonly xususiyatidan farqli, massivning O'ZINI ham (metodlar orqali, masalan push) o'zgartirishga to'liq yo'l qo'ymaydi — bu ancha "chuqurroq" himoya.
Tuple — aniq UZUNLIK va har bir POZITSIYADAGI aniq TURга ega massiv. Oddiy massivdan farqli, tuple'da har bir "joy"ning o'z turi bor.
index.tsTypeScriptlet point: [number, number] = [10, 20];let entry: [string, number] = ["yosh", 26];// Ixtiyoriy va rest elementlar bilanlet coordinate: [number, number, number?] = [10, 20]; // z ixtiyoriylet numbers: [string, ...number[]] = ["jami", 1, 2, 3];// Nomlangan tuple elementlari (o'qish oson bo'lishi uchun)let user: [name: string, age: number] = ["Abbosbek", 26];
⚠️ Common Mistake
index.tsTypeScriptlet point: [number, number] = [10, 20, 30]; // XATO: Source has 3 element(s) but target allows only 2
Tuple — qat'iy uzunlikka ega, undan ortiq yoki kam element berish xato hisoblanadi (rest element ishlatilmagan bo'lsa).
Tuple'lar ko'pincha "juftlik" yoki "belgilangan tartibdagi qiymatlar to'plami"ni ifodalash uchun ishlatiladi — masalan React'ning useState qaytaradigan [value, setValue] massivi aynan tuple sifatida tiplangan.
index.tsTypeScriptfunction useCounterLike(): [number, () => void] {let count = 0;const increment = () => { count++; };return [count, increment];}const [count, increment] = useCounterLike();// TypeScript 'count'ni number, 'increment'ni funksiya deb "biladi" — tartib muhim!
Task: Foydalanuvchi ismlaridan iborat string[] massivi va ularning yoshlaridan iborat number[] massivini yarating.
Task: [latitude: number, longitude: number] tuple turini yarating va uni qabul qiluvchi printCoordinates funksiyasini yozing.
Task: readonly tuple turini (readonly [number, number]) yarating va uning elementlarini o'zgartirishga urinib, xatoni kuzating.
index.tsTypeScriptfunction getMinMax(numbers: number[]): [number, number] {const min = Math.min(...numbers);const max = Math.max(...numbers);return [max, min]; // ?}const [minValue, maxValue] = getMinMax([5, 2, 8, 1]);console.log(minValue); // Nima chiqadi?
Your Task: Bu kod compile vaqtida xato bermaydi, lekin natija mantiqan noto'g'ri. Nega?
<details> <summary>Solution</summary> Funksiya `[number, number]` qaytaradi va bu turga mos (ikkala qiymat ham `number`), shuning uchun TypeScript xato bermaydi — lekin funksiya ichida `[max, min]` tartibda qaytarilgan, `getMinMax` nomi esa "min, keyin max" tartibini kutmoqda. Natijada `minValue` o'zgaruvchisi aslida `max` qiymatini oladi! Bu — TypeScript tur xavfsizligini ta'minlasa-da, MANTIQIY (semantik) xatolarni ushlay olmasligini ko'rsatadi. Yechim: `return [min, max];` </details>Massivlar — bir xil turdagi, cheksiz sonli elementlar uchun (string[]). Tuple'lar — aniq uzunlik va har bir pozitsiyada aniq turga ega ketma-ketliklar uchun ([string, number]). readonly — ikkalasiga ham qo'llanilib, mutatsiyani (metodlar orqali ham) to'liq bloklaydi.
Type[] va Array<Type> — funksional jihatdan bir xilreadonly massiv/tuple — mutatsiya metodlarini butunlay olib tashlaydiindex.tsTypeScriptlet arr: string[] = ["a", "b"];let ro: readonly number[] = [1, 2];let tuple: [string, number] = ["age", 26];let optTuple: [number, number?] = [1];let restTuple: [string, ...number[]] = ["sum", 1, 2, 3];
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: