Access modifiers — public, private, protected
BankHisobi classida balans xususiyati bor. Tashqaridan to'g'ridan o'zgartirish xavfli — salbiy qoldiq bo'lib qolishi mumkin:
const hisob = new BankHisobi(1000);
hisob.balans = -500; // ❌ — mantiqan noto'g'ri, lekin TypeScript ruxsat beradi
Access modifiers — xususiyat va metodlarga kirish huquqini belgilash.
public — har joydan kirish (standart)
Barcha xususiyat va metodlar standart public — alohida yozish shart emas:
class Foydalanuvchi {
public ism: string; // explicit
email: string; // ham public (standart)
public salomlash(): string {
return `Salom, ${this.ism}!`;
}
}
const u = new Foydalanuvchi();
u.ism; // ✅ tashqaridan
u.salomlash(); // ✅ tashqaridan
private — faqat class ichidan
class BankHisobi {
private balans: number;
constructor(boshlangich: number) {
this.balans = boshlangich;
}
kiritish(summa: number): void {
if (summa <= 0) throw new Error("Summa musbat bo'lishi kerak");
this.balans += summa;
}
olish(summa: number): void {
if (summa > this.balans) throw new Error("Mablag' yetarli emas");
this.balans -= summa;
}
ko_rish(): number {
return this.balans;
}
}
const hisob = new BankHisobi(1000);
hisob.kiritish(500);
hisob.ko_rish(); // 1500 ✅
hisob.balans; // ❌ — private, tashqaridan kirish yo'q
hisob.balans = -500; // ❌ — private
protected — class va voris
private + meros olgan classlarda ham kirish mumkin:
class Hayvon {
protected ism: string;
constructor(ism: string) {
this.ism = ism;
}
protected tavsif(): string {
return `Hayvon: ${this.ism}`;
}
}
class It extends Hayvon {
ovoz(): string {
return `${this.ism} deydi: Vov!`; // ✅ — protected, voris kiradi
}
}
const it = new It("Baxter");
it.ovoz(); // ✅
it.ism; // ❌ — protected, tashqaridan kirish yo'q
# — JavaScript private (hard private)
TypeScript private — compile-time tekshiruv, runtime da xususiyat hali ochiq. Haqiqiy private uchun JavaScript ning #:
class Counter {
#count = 0; // haqiqiy private — runtime da ham yashirin
increment(): void { this.#count++; }
value(): number { return this.#count; }
}
const c = new Counter();
c.#count; // ❌ — syntax xato, hatto runtime da ham
Tez-tez uchraydigan xatolar
private konstruktorda:
class Singleton {
private static instans: Singleton;
private constructor() {} // ✅ — tashqaridan new qilib bo'lmaydi
static olish(): Singleton {
if (!Singleton.instans) Singleton.instans = new Singleton();
return Singleton.instans;
}
}
new Singleton(); // ❌ — constructor private
Singleton.olish(); // ✅
Xulosa
public — har joydan kirish (standart)
private — faqat class ichidan (compile-time)
protected — class va vorislardan
#field — haqiqiy private (runtime da ham yashirin)
class Example {
public ochiq: string = "";
private yashirin: number = 0;
protected himoyalangan: boolean = false;
#haqiqiy: string = "";
}
Keyingi dars
40-dars: readonly xususiyatlar va parameter properties