تضييق الأنواع
Type Narrowing
تضييق الأنواع — Type Narrowing
عندما تكون القيمة union، تحتاج تضييق النوع قبل استخدامها. إذا كانت القيمة string | number، لا يمكنك استدعاء toUpperCase مباشرة لأن الرقم لا يملك هذه الدالة. لكن بعد شرط typeof value === "string"، يعرف TypeScript داخل الفرع أن القيمة نص.
هذا ليس فقط لإرضاء compiler. إنه يعبر عن منطق حقيقي: قبل أن تتعامل مع القيمة كنص، تأكد أنها نص. تضييق الأنواع يجعل الكود أكثر أماناً وأكثر وضوحاً للقارئ.
مثال عملي
داخل فرع string، تظهر دوال النصوص. داخل فرع number، تظهر دوال الأرقام. هذا هو narrowing.
طرق التضييق
ستستخدم typeof للقيم البدائية، وin لفحص وجود خاصية، ووسوم مثل kind في discriminated unions. كلما كان نموذج البيانات أوضح، أصبح التضييق أسهل.
unknown مقابل any — unknown vs any
any يوقف كل الفحوصات كلياً — تستطيع استدعاء أي دالة على القيمة بدون أخطاء. هذا خطر لأن TypeScript يصمت عن الأخطاء الحقيقية.
unknown يجبرك على التضييق أولاً قبل أي استخدام. استخدمه عند حدود النظام: JSON غير معروف، قيمة خارجية، معامل عام:
القاعدة: استخدم unknown عند الحدود، وضيّق النوع داخلياً. any مقبول فقط في حالات نادرة جداً مبررة في كل موضع.