🔷 شرح TypeScript

الأصناف (Classes)

صنف بأنواع

TypeScript يضيف الأنواع ومُعدِّلات الوصول إلى أصناف JavaScript:

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): string {
    return `أنا ${this.name}`;
  }
}

const p = new Person("سارة", 28);
console.log(p.greet());

مُعدِّلات الوصول

المُعدِّلالوصول
publicمن أي مكان (الافتراضي)
privateداخل الصنف فقط
protectedداخل الصنف وأصنافه الوارثة
class BankAccount {
  private balance: number = 0;

  deposit(amount: number) {
    this.balance += amount;
  }

  getBalance(): number {
    return this.balance;
  }
}

const acc = new BankAccount();
acc.deposit(100);
acc.balance = 999;       // خطأ! private
console.log(acc.getBalance());

اختصار المُنشئ (Parameter Properties)

تعريف الخصائص مباشرة في المُنشئ:

class Product {
  constructor(
    public name: string,
    private price: number
  ) {}
}
// name وprice أصبحا خصائص تلقائيًّا

readonly

خاصية تُسنَد مرة واحدة فقط:

class Circle {
  readonly pi = 3.14;
}

تطبيق الواجهات (implements)

تضمن أن الصنف يحقّق شكلًا معيّنًا:

interface Drivable {
  start(): void;
  stop(): void;
}

class Car implements Drivable {
  start() { console.log("انطلق"); }
  stop() { console.log("توقّف"); }
}

أخطاء شائعة

  • نسيان أن private في TypeScript محمي وقت الترجمة فقط.
  • نسيان تهيئة الخصائص في المُنشئ (يشتكي strict).

🎯 التالي: الأنواع العامّة (Generics).