0Pricing
TypeScript Academy · درس

كتابة الأخطاء (unknown) وتضييق النطاق في catch

حدّد أنواع معاملات catch كـ unknown، ثم ضيّقها باستخدام instanceof أو typeof أو حواجز مخصصة لمعالجة الأخطاء بأمان.

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

مقدمة

الهدف: التقاط الأخطاء بالنوع unknown وتضييق النوع بأمان. ستستخدم instanceof وtypeof وحواجز أنواع مخصصة لقراءة بيانات الأخطاء دون مفاجآت.

unknown + instanceof

ابدأ بالنوع unknown. ضيّق النوع باستخدام instanceof Error للوصول إلى message وstack وغيرهما.

async function boom(): Promise<void> { throw new Error("boom") }

async function run() {
  try {
    await boom();
  } catch (e: unknown) {
    if (e instanceof Error) {
      console.error("Handled:", e.message);
    } else {
      console.error("Non-Error thrown:", e);
    }
  }
}

run();

typeof للقيم البدائية

ترمي بعض التعليمات البرمجية سلاسل نصية أو قيمًا بدائية أخرى. استخدم typeof لتضييق النوع والتعامل معها بسلاسة.

function throwString() { throw "bad" }

try {
  throwString();
} catch (e: unknown) {
  if (typeof e === "string") {
    console.warn("string error:", e.toUpperCase());
  } else {
    console.warn("other error", e);
  }
}

حارس مخصص

أنشئ حارس نوع يعرّفه المستخدم للتعرف على الأشكال «الشبيهة بالأخطاء» القادمة من طبقات مختلفة.

type ErrorLike = { message: string; code?: string };

function isErrorLike(e: unknown): e is ErrorLike {
  return !!e && typeof e === "object" && "message" in e;
}

try {
  throw { message: "oops", code: "E_BAD" };
} catch (e: unknown) {
  if (isErrorLike(e)) {
    console.error(e.message, e.code ?? "no-code");
  } else {
    console.error("unknown error", e);
  }
}

تسجيل آمن

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

function logErrorSafe(e: unknown): void {
  if (e instanceof Error) {
    console.error("Error:", e.message);
  } else if (typeof e === "string") {
    console.error("Error(string):", e);
  } else {
    try {
      console.error("Error(obj):", JSON.stringify(e));
    } catch {
      console.error("Error(unknown)");
    }
  }
}

try { throw { oops: true } } catch (e: unknown) { logErrorSafe(e) }

نصائح

نصائح:

  • فضّل unknown في catch.
  • ضيّق النوع باستخدام instanceof أو typeof أو حواجز الأنواع.
  • تجنب افتراض أن القيمة من النوع Error؛ فقد ترمي التعليمات البرمجية التابعة لجهات خارجية أي قيمة.

التحقق من كتابة نوع الخطأ

تحقق سريع: لماذا يُفضّل استخدام unknown في catch؟

مراجعة

مراجعة: التقط الأخطاء بالنوع unknown، وضيّق النوع باستخدام instanceof/typeof أو حواجز مخصصة، ووحّد التسجيل الآمن في مكان واحد.

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

هل درس «كتابة الأخطاء (unknown) وتضييق النطاق في catch» مجاني؟

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

ماذا ستتعلم في «كتابة الأخطاء (unknown) وتضييق النطاق في catch»؟

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

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

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

كم من الوقت يستغرق درس «كتابة الأخطاء (unknown) وتضييق النطاق في catch»؟

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

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

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

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

  1. Promise وكتابة async/await
  2. كتابة الأخطاء (unknown) وتضييق النطاق في catch
  3. أنماط التزامن (all/settled/race) وأنواعها
← العودة إلى TypeScript Academy