Class — TypeScript da asoslar, oddiy JavaScript dan farqi
JavaScript da class xususiyatlarini oldindan e'lon qilish shart emas — this.ism = "..." constructor da yozilsa ishlaydi. TypeScript da esa xususiyatlar oldindan e'lon qilinishi va turi belgilanishi shart.
TypeScript class asoslari
class Foydalanuvchi {
// Xususiyatlar oldindan e'lon qilinadi
ism: string;
yosh: number;
email: string;
constructor(ism: string, yosh: number, email: string) {
this.ism = ism;
this.yosh = yosh;
this.email = email;
}
salomlash(): string {
return `Salom, ${this.ism}!`;
}
}
const user = new Foydalanuvchi("Jasur", 25, "jasur@mail.com");
user.salomlash(); // "Salom, Jasur!"
JavaScript vs TypeScript class farqi
// JavaScript — xususiyat e'loni ixtiyoriy
class User {
constructor(ism) {
this.ism = ism; // ✅ ishlaydi
}
}
// TypeScript — e'lon majburiy
class User {
ism: string; // ← bu bo'lmasa xato
constructor(ism: string) {
this.ism = ism;
}
}
Tur tekshiruvi
TypeScript class ni tur sifatida ishlatadi:
function salomlash(user: Foydalanuvchi): string {
return user.salomlash();
}
salomlash(new Foydalanuvchi("Ali", 20, "ali@mail.com")); // ✅
salomlash({ ism: "Ali", yosh: 20, email: "..." }); // ✅ — structural typing
salomlash("Ali"); // ❌ — string emas
Meros olish
class Admin extends Foydalanuvchi {
ruxsatlar: string[];
constructor(ism: string, yosh: number, email: string, ruxsatlar: string[]) {
super(ism, yosh, email); // ota-class constructor
this.ruxsatlar = ruxsatlar;
}
ruxsatBormi(r: string): boolean {
return this.ruxsatlar.includes(r);
}
}
const admin = new Admin("Jasur", 28, "j@mail.com", ["o'chirish", "tahrirlash"]);
admin.salomlash(); // ✅ meros olgan metod
admin.ruxsatBormi("o'chirish"); // ✅ o'z metodi
Xususiyat initializator
Constructor o'rniga to'g'ridan qiymat berish:
class Hisoblagich {
qiymat: number = 0; // boshlang'ich qiymat
nomi: string = "standart";
oshirish(): void { this.qiymat++; }
}
const h = new Hisoblagich();
h.qiymat; // 0
h.oshirish();
h.qiymat; // 1
Tez-tez uchraydigan xatolar
E'lon qilinmagan xususiyat:
class User {
constructor(ism: string) {
this.ism = ism; // ❌ — Property 'ism' does not exist on type 'User'
}
}
class User {
ism: string; // ✅ — oldindan e'lon
constructor(ism: string) { this.ism = ism; }
}
super() dan oldin this ishlatish:
class Admin extends Foydalanuvchi {
constructor() {
this.ruxsatlar = []; // ❌ — super() dan oldin this bo'lmaydi
super("", 0, "");
}
}
Xulosa
class MyClass {
xususiyat: Tur; // e'lon — majburiy
xususiyat: Tur = qiymat; // initializator bilan
constructor(x: Tur) {
this.xususiyat = x;
}
metod(): QaytishTuri {
return ...;
}
}
class Child extends MyClass {
constructor() {
super(...); // avval super, keyin this
}
}
Keyingi dars
39-dars: Access modifiers — public, private, protected