Asosiy interfeys sintaksisi, optional/readonly xususiyatlar, metod tiplari va interface extends (bir nechta meros) — chuqur test va debugging mashqlari bilan.
Interfeyslar — obyektlarning "shaklini" (shape) tasvirlashning eng ko'p ishlatiladigan usuli. Bu bob interfeyslarni barcha asosiy xususiyatlari bilan chuqur yoritadi.
interface — obyekt qanday maydonlarga va turlarga ega bo'lishi kerakligini belgilaydigan "shablon".
index.tsTypeScriptinterface User {name: string;age: number;isActive: boolean;}const user: User = {name: "Abbosbek",age: 26,isActive: true,};// Yetishmayotgan maydon — XATOconst invalidUser: User = {name: "Vali",age: 20,// isActive yo'q — XATO: Property 'isActive' is missing};
index.tsTypeScriptinterface Product {id: number;name: string;discount?: number; // optional — bo'lishi shart emasreadonly sku: string; // readonly — yaratilgandan keyin o'zgartirib bo'lmaydi}const product: Product = { id: 1, name: "Telefon", sku: "TEL-001" };// discount berilmagan — muammosiz, chunki u optionalproduct.sku = "YANGI-001"; // XATO: Cannot assign to 'sku' because it is a read-only property
⚠️ Common Mistake
readonlyni obyektning "chuqur" (deep) immutability'sini ta'minlaydi deb o'ylash — bu noto'g'ri. readonly faqat bevosita maydonni qayta tayinlashning oldini oladi, agar maydon obyekt yoki massiv bo'lsa, uning ICHKI qiymatlarini hamon o'zgartirish mumkin.
index.tsTypeScriptinterface Calculator {add(a: number, b: number): number;subtract: (a: number, b: number) => number;}const calc: Calculator = {add(a, b) { return a + b; },subtract: (a, b) => a - b,};
Interfeyslar extends orqali bir-biridan meros olishi mumkin, bu kodni takrorlamasdan umumiy maydonlarni qayta ishlatish imkonini beradi.
index.tsTypeScriptinterface Animal {name: string;age: number;}interface Dog extends Animal {breed: string;}const myDog: Dog = {name: "Rex",age: 3,breed: "Labrador",};// Bir nechta interfeysdan meros olishinterface Employee { salary: number; }interface Manager extends Animal, Employee {teamSize: number;}
💡 Key Idea
extends — obyekt-orientlashgan dasturlashdagi meros (inheritance) tushunchasiga o'xshaydi, lekin bu yerda faqat "shakl" (tip) darajasida, real xatti-harakat (metod implementatsiyasi) emas.
Task: id, title, completed maydonlariga ega Todo interfeysi yarating va unga mos obyekt yarating.
Task: BaseEntity (id, createdAt) interfeysini yaratib, undan Product va User interfeyslarini extends orqali kengaytiring.
Task: readonly massiv maydoniga ega interfeys yarating va uning "chuqur immutable emasligi"ni amaliy tarzda ko'rsating (massiv ichiga element qo'shish orqali).
index.tsTypeScriptinterface Config {readonly apiUrl: string;timeout?: number;}function setup(config: Config) {config.apiUrl = "https://new-api.com"; // ?if (config.timeout.toString()) {} // ?}
Your Task: Bu kodda ikkita xato bor. Ularni toping.
<details> <summary>Solution</summary> 1. `config.apiUrl = "..."` — `apiUrl` `readonly`, uni qayta tayinlash mumkin emas. 2. `config.timeout.toString()` — `timeout` optional (`number | undefined`), u `undefined` bo'lishi mumkin, shuning uchun to'g'ridan-to'g'ri `.toString()` chaqirish xavfli (agar `strictNullChecks` yoqilgan bo'lsa, TypeScript xato beradi). Yechim: ```typescript function setup(config: Config) { if (config.timeout !== undefined) { config.timeout.toString(); } } ``` </details>Interfeyslar — obyekt "shakli"ni tasvirlaydi. ? — ixtiyoriy maydon, readonly — qayta tayinlashni (lekin ichki o'zgartirishni emas) bloklaydi. extends — interfeyslarni kengaytirish, bir nechta interfeysdan meros olish imkoniyati bilan.
readonly — sayoz (shallow) immutability, chuqur emasextends — bir nechta interfeysdan meros olishga imkon beradiindex.tsTypeScriptinterface User {id: number;name: string;email?: string;readonly createdAt: Date;}interface Admin extends User {permissions: string[];}
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: