0Pricing
TypeScript Academy · درس

تضييق النوع باستخدام instanceof وin

ضيّقوا أنواع مثيلات الفئات وأشكال الكائنات

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

مرحبًا

يضيّق `instanceof` مثيلات الفئات، بينما يضيّق `in` أنواع الكائنات استنادًا إلى وجود الخصائص. وكلاهما أساسي للعمل مع الاتحادات المعقدة.

التضييق باستخدام instanceof

استخدم `instanceof` للتحقق مما إذا كانت القيمة مثيلًا لفئة. وسيضيّق TypeScript النوع إلى تلك الفئة.
function handle(err: Error | string) {
  if (err instanceof Error) {
    console.log(err.message); // err: Error
  } else {
    console.log(err); // err: string
  }
}

instanceof مع الفئات المخصّصة

يعمل instanceof مع الفئات التي تنشئونها أنتم أيضًا.
class Dog { bark() { return 'Woof'; } }
class Cat { meow() { return 'Meow'; } }
function speak(pet: Dog | Cat) {
  if (pet instanceof Dog) pet.bark();
  else pet.meow();
}

لا يعمل instanceof مع الواجهات

تُحذف الواجهات أثناء التشغيل. ولا يمكنك استخدام instanceof مع واجهة، بل مع الفئات فقط.

العامل in

استخدم `in` للتحقق مما إذا كانت خاصية موجودة في كائن. وسيضيّق TypeScript الاتحاد إلى الأعضاء الذين يمتلكون تلك الخاصية.
type Fish = { swim(): void };
type Bird = { fly(): void };
function move(animal: Fish | Bird) {
  if ('swim' in animal) animal.swim();
  else animal.fly();
}

التضييق باستخدام in مع الخصائص الاختيارية

يضيّق `in` النوع أيضًا عند التعامل مع الخصائص الاختيارية؛ إذ يضيّقه إلى أعضاء الاتحاد الذين يمكن أن توجد لديهم الخاصية.
type A = { x?: number };
type B = { y: number };
function process(v: A | B) {
  if ('x' in v) {
    // v: A (has optional x)
  }
}

دمج instanceof وin

يمكنك دمج تقنيتي التضييق كلتيهما لتمييز الأنواع المعقدة.
function describe(v: Error | { message: string }) {
  if (v instanceof Error) console.log('Error:', v.stack);
  else if ('message' in v) console.log('Object:', v.message);
}

استخدام in مع الاتحادات المميّزة

عندما لا يمتلك أعضاء الاتحاد خاصية مميّزة، يمكن لعمليات التحقق باستخدام `in` أن تؤدي الغرض نفسه في التضييق.
type Square = { side: number };
type Circle = { radius: number };
function area(s: Square | Circle): number {
  return 'side' in s ? s.side ** 2 : Math.PI * s.radius ** 2;
}

instanceof في كتل catch

استخدم instanceof في كتل catch للتمييز بين أنواع الأخطاء.
try {
  await fetchData();
} catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else throw err;
}

التحقق باستخدام Object.prototype مقابل in

يتحقق كل من `key in obj` و`Object.prototype.hasOwnProperty.call(obj, key)` من وجود الخاصية، لكن `in` يطابق الخصائص الموروثة أيضًا.

أولوية التضييق

عند انطباق عمليات تضييق متعددة، يقطع TypeScript الأنواع المضيّقة، مما ينتج النوع الأكثر تحديدًا الممكن.

تحقق سريع

لماذا لا يمكنك استخدام `instanceof` لتضييق نوع واجهة في TypeScript؟

مراجعة

يضيّق `instanceof` مثيلات الفئات أثناء التشغيل. ويضيّق `in` اتحادات الكائنات استنادًا إلى وجود الخصائص. استخدم كليهما عند العمل مع تسلسلات الفئات واتحادات الكائنات البنيوية.

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

هل درس «تضييق النوع باستخدام instanceof وin» مجاني؟

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

ماذا ستتعلم في «تضييق النوع باستخدام instanceof وin»؟

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

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

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

كم من الوقت يستغرق درس «تضييق النوع باستخدام instanceof وin»؟

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

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

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

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

  1. تضييق النوع باستخدام typeof وقيم الصواب
  2. تضييق النوع باستخدام instanceof وin
  3. دوال حراسة الأنواع المعرّفة من المستخدم
  4. التحقق من الشمولية باستخدام never
← العودة إلى TypeScript Academy