0Pricing
TypeScript Academy · درس

قيود الأنواع العامة باستخدام extends

قيّدوا معاملات الأنواع بأشكال محددة

قيود الأنواع العامة باستخدام extends درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مرحبًا

تضيّق القيود العامة الأنواع التي يمكن تمريرها كوسائط للأنواع. استخدم `extends` لفرض احتواء T على خصائص معينة أو مطابقته لبنية معينة.

المشكلة في غياب القيود

من دون قيود، لا يعرف TypeScript العمليات الصالحة على T، لذلك لا يسمح إلا بالعمليات المشتركة بين جميع الأنواع.
function getLength<T>(val: T): number {
  // return val.length; // Error — T might not have .length
}

إضافة قيد

استخدم `T extends Shape` لفرض احتواء T على خصائص Shape على الأقل.
function getLength<T extends { length: number }>(val: T): number {
  return val.length;
}
getLength('hello');  // OK — string has .length
getLength([1, 2]);   // OK — array has .length
// getLength(42);   // Error — number has no .length

تقييد النوع بواجهة

قيّد T بحيث ينفذ واجهة محددة.
interface Named { name: string; }
function greet<T extends Named>(person: T): string {
  return 'Hello, ' + person.name;
}

قيد keyof

استخدم `K extends keyof T` لتقييد K بمفاتيح T. يتيح ذلك الوصول الآمن إلى الخصائص.
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}
const age = getProperty({ name: 'Alice', age: 30 }, 'age'); // number

التقييد باتحاد

يمكن تقييد T بنوع اتحاد، مما يحصر وسيطة النوع في قيم محددة.
type Status = 'active' | 'inactive' | 'banned';
function setStatus<T extends Status>(status: T): void {
  console.log('Setting status:', status);
}

التقييد بمنشئ

قيّد T ليكون فئة، أي أن يمتلك منشئًا، حتى تتمكن من إنشاء مثيلات داخل الدالة.
function create<T>(ctor: new () => T): T {
  return new ctor();
}

قيود متعددة باستخدام التقاطع

قيّد T بحيث يستوفي واجهات متعددة باستخدام التقاطع.
interface Serializable { serialize(): string; }
interface Loggable { log(): void; }
function process<T extends Serializable & Loggable>(item: T): void {
  item.log();
  console.log(item.serialize());
}

وراثة القيود

تعمل القيود مع الوراثة. فإذا كان T يمتد فئة أساسية، يمكنك استدعاء جميع دوال الفئة الأساسية.
class Animal { breathe() { return 'breathing'; } }
function care<T extends Animal>(a: T): string { return a.breathe(); }

T extends نفسه (تكراري)

يمكن أن تكون القيود مرجعية ذاتيًا لهياكل البيانات التكرارية.
interface Comparable<T> { compareTo(other: T): number; }
function max<T extends Comparable<T>>(a: T, b: T): T {
  return a.compareTo(b) >= 0 ? a : b;
}

رسائل أخطاء القيود

عندما لا تستوفي وسيطة النوع قيدًا ما، يعرض TypeScript خطأً واضحًا يذكر كلًا من الوسيطة والقيد.

فحص سريع

إلى ماذا يقيّد `K extends keyof T` قيمة K؟

مراجعة

استخدم `T extends SomeType` لتقييد معاملات الأنواع العامة. يتيح لك ذلك استدعاء دوال محددة على T، واستخدام keyof للوصول الآمن إلى الخصائص، وإنشاء أدوات آمنة من ناحية الأنواع.

الأسئلة الشائعة

هل درس «قيود الأنواع العامة باستخدام extends» مجاني؟

نعم — نص درس «قيود الأنواع العامة باستخدام extends» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «قيود الأنواع العامة باستخدام extends»؟

قيّدوا معاملات الأنواع بأشكال محددة تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «قيود الأنواع العامة باستخدام extends»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الدوال العامة: معاملات الأنواع
  2. الواجهات العامة والأسماء المستعارة للأنواع
  3. قيود الأنواع العامة باستخدام extends
  4. معاملات الأنواع الافتراضية
← العودة إلى TypeScript Academy