Access modifikatorlar (public/private/protected), parameter properties, interface implement, abstract class'lar, static a'zolar va getter/setter — chuqur test va debugging mashqlari bilan.
TypeScript — JavaScript class'lariga tip xavfsizligini, access modifikatorlarni va qo'shimcha OOP xususiyatlarini qo'shadi.
index.tsTypeScriptclass Person {public name: string; // hamma joydan kirish mumkin (standart)private age: number; // faqat shu class ichidanprotected email: string; // shu class va uning avlodlaridanconstructor(name: string, age: number, email: string) {this.name = name;this.age = age;this.email = email;}greet(): string {return `Salom, men ${this.name}man`;}}const p = new Person("Abbosbek", 26, "a@example.com");console.log(p.name); // TO'G'RIconsole.log(p.age); // XATO: 'age' is private
index.tsTypeScript// Uzun usulclass PersonLong {name: string;constructor(name: string) {this.name = name;}}// Qisqartma — access modifikator bilan constructor parametridaclass Person {constructor(public name: string,private age: number,readonly id: number) {}}const p = new Person("Abbosbek", 26, 1);console.log(p.name); // "Abbosbek" — avtomatik xususiyat sifatida yaratildi
💡 Key Idea
Constructor parametriga to'g'ridan-to'g'ri access modifikator (public, private, protected, readonly) qo'yish — TypeScript'ga "bu parametrni avtomatik ravishda class xususiyatiga aylantir va thisga tayinla" deb aytadi, bu esa ko'p takrorlanadigan kodni yo'q qiladi.
index.tsTypeScriptinterface Shape {getArea(): number;}class Circle implements Shape {constructor(private radius: number) {}getArea(): number {return Math.PI * this.radius ** 2;}}abstract class Animal {abstract makeSound(): void; // implementatsiyasiz, avlodlar berishi SHARTmove(): void {console.log("Harakatlanmoqda...");}}class Dog extends Animal {makeSound(): void {console.log("Vov!");}}// const a = new Animal(); // XATO: Cannot create an instance of an abstract class
index.tsTypeScriptclass Counter {static count: number = 0;static increment(): void {Counter.count++;}private _value: number = 0;get value(): number {return this._value;}set value(newValue: number) {if (newValue < 0) {throw new Error("Manfiy qiymat bo'lishi mumkin emas");}this._value = newValue;}}Counter.increment();console.log(Counter.count); // 1 — instansiyasiz kirish mumkinconst c = new Counter();c.value = 10; // setter chaqiriladiconsole.log(c.value); // getter chaqiriladi, 10
Task: name (public) va balance (private) xususiyatlariga ega BankAccount class'ini yarating, parameter properties sintaksisidan foydalanib.
Task: Shape interfeysini implement qiluvchi Rectangle va Circle class'larini yarating, har biri o'z getArea() metodiga ega.
Task: validate() abstract metodiga ega abstract class Validator yaratib, undan EmailValidator va PhoneValidator class'larini hosil qiling.
index.tsTypeScriptclass Employee {protected salary: number;constructor(salary: number) {this.salary = salary;}}class Manager extends Employee {giveRaise(amount: number) {this.salary += amount; // ?}}const emp = new Employee(5000);console.log(emp.salary); // ?
Your Task: Ikkita qatordan qaysi biri xato beradi?
<details> <summary>Solution</summary> Faqat `console.log(emp.salary);` xato beradi — `salary` `protected`, u faqat `Employee` class'ining O'ZIDAN yoki uning AVLODLARIDAN (masalan `Manager` ichida) kirish mumkin, lekin tashqaridan (masalan `emp.salary` orqali to'g'ridan-to'g'ri) kirish mumkin emas. `Manager` ichidagi `this.salary += amount;` esa to'g'ri ishlaydi, chunki `Manager` — `Employee`ning avlodi. </details>Class'lar — public/private/protected orqali kirish darajasini boshqaradi. Parameter properties — constructor kodini qisqartiradi. implements — interfeys kontraktini majburlaydi, abstract class — to'liq bo'lmagan shablon yaratadi. static — class darajasidagi a'zolar, getter/setter — nazoratli kirish/yozish imkonini beradi.
public (standart), private, protected — kirish darajalarini boshqaradiconstructor(public x: T) — kodni qisqartiradiimplements — interfeys, extends — meros uchunindex.tsTypeScriptclass Person {constructor(public name: string, private age: number) {}}interface Shape { getArea(): number; }class Circle implements Shape { getArea() { return 0; } }abstract class Base { abstract doWork(): void; }class Impl extends Base { doWork() {} }
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: