Generics TypeScript مع الأمثلة

تعد العناصر العامة في TypeScript ميزة قوية تتيح لك إنشاء مكونات قابلة لإعادة الاستخدام وآمنة للأنواع. توفر العناصر العامة طريقة لإنشاء فئات ووظائف وواجهات تعمل مع مجموعة متنوعة من الأنواع مع الحفاظ على سلامة النوع القوية. ستقدم لك هذه المقالة العناصر العامة وتوضح لك كيفية استخدامها من خلال أمثلة عملية.

فهم الأنواع العامة

تتيح لك العناصر العامة تعريف مكون باستخدام عنصر نائب للنوع الذي يعمل عليه. وبدلاً من تحديد نوع محدد، يمكنك استخدام معلمة نوع عامة يمكن استبدالها بأي نوع عند استخدام المكون.

بناء الجملة الأساسي

إن البنية الأساسية لتعريف نوع عام هي استخدام أقواس الزاوية <> مع اسم معلمة النوع. إليك مثال بسيط:

function identity(value: T): T {
  return value;
}

const stringIdentity = identity("Hello"); // string
const numberIdentity = identity(123); // number

في هذا المثال، identity هي دالة عامة تأخذ معلمة value من النوع T وترجع قيمة من نفس النوع. يتم استبدال معلمة النوع T بالنوع الفعلي عند استدعاء الدالة.

الأنواع العامة مع الفئات

يمكن أيضًا استخدام العناصر العامة مع الفئات لإنشاء هياكل بيانات مرنة وقابلة لإعادة الاستخدام. فيما يلي مثال لفئة عامة:

class Box {
  private value: T;

  constructor(value: T) {
    this.value = value;
  }

  getValue(): T {
    return this.value;
  }
}

const stringBox = new Box("TypeScript");
console.log(stringBox.getValue()); // Output: TypeScript

const numberBox = new Box(42);
console.log(numberBox.getValue()); // Output: 42

في هذا المثال، تم تعريف فئة Box بمعلمة النوع العام T. تحتوي الفئة على خاصية خاصة value من النوع T وطريقة getValue تعيد القيمة من النوع T.

الأنواع العامة مع الواجهات

يمكن استخدام العناصر العامة مع الواجهات لإنشاء واجهات مرنة وآمنة للأنواع. فيما يلي مثال:

interface Pair<T, U> {
  first: T;
  second: U;
}

const pair: Pair<string, number> = {
  first: "Age",
  second: 30
};

console.log(pair.first); // Output: Age
console.log(pair.second); // Output: 30

في هذا المثال، يتم تعريف واجهة Pair بمعلمتي نوع عامتين هما T وU. تمثل الواجهة زوجًا من القيم ذات النوعين T وU على التوالي.

العناصر العامة في الدوال

يمكن استخدام العناصر العامة في الوظائف للتعامل مع أنواع متعددة مع الحفاظ على سلامة النوع. فيما يلي مثال لوظيفة عامة تعمل مع المصفوفات:

function reverseArray(items: T[]): T[] {
  return items.reverse();
}

const reversedStringArray = reverseArray(["one", "two", "three"]);
console.log(reversedStringArray); // Output: ["three", "two", "one"]

const reversedNumberArray = reverseArray([1, 2, 3]);
console.log(reversedNumberArray); // Output: [3, 2, 1]

في هذا المثال، تأخذ الدالة reverseArray مصفوفة من النوع T وتعيد مصفوفة معكوسة من نفس النوع. تضمن معلمة النوع T أن تعمل الدالة مع المصفوفات من أي نوع مع الحفاظ على أمان النوع.

القيود المفروضة على الكائنات العامة

في بعض الأحيان قد تحتاج إلى فرض قيود على معلمة النوع العام للتأكد من أنها تحتوي على خصائص معينة. يتم ذلك باستخدام القيود:

function logLength(item: T): void {
  console.log(item.length);
}

logLength("Hello, TypeScript"); // Output: 16
logLength([1, 2, 3]); // Output: 3
// logLength(123); // Error: number does not have a length property

في هذا المثال، تقتصر الدالة logLength على الأنواع التي تحتوي على الخاصية length. وهذا يسمح للدالة بقبول السلاسل والمصفوفات ولكن ليس الأرقام أو الأنواع الأخرى التي لا تحتوي على الخاصية length.

خاتمة

توفر العناصر العامة في TypeScript طريقة قوية لإنشاء مكونات مرنة وقابلة لإعادة الاستخدام مع الحفاظ على سلامة النوع القوية. من خلال فهم العناصر العامة والاستفادة منها، يمكنك كتابة أكواد أكثر عمومية وقابلية للتكيف، مما يحسن الجودة الشاملة وقابلية صيانة تطبيقات TypeScript الخاصة بك.

جرّب العناصر العامة في مشاريعك لرؤية فوائدها في العمل وتعزيز مهاراتك في برمجة TypeScript.