Class — TypeScript da asoslar, oddiy JavaScript dan farqi

~15 daq · TypeScript · OOP

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