contextual الأنواع السياقية

آخر تحديث: 2026-10-22

contextual الأنواع السياقية

النوع السياقي: عندما يقع كدالة مجهولة في «موضع نوعه معروف مسبقًا» (تعليق متغير، استدعاء راجع لطريقة مصفوفة، معالج حدث)، يستنتج TS أنواع معاملاتها عكسيًا — دون حاجة لكتابة تعليقات يدويًا. فالمتغير o في map((o) => o.id) له نوع ليس لاستدلال من الدالة نفسها، بل لأنه قادم من نوع عناصر المصفوفة، أي من «السياق».

المجموعةالدوال والأصناف
النوعبناء الجملة
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

const orders: Order[] = [];

// يأخذ مُعامل الدالة o نوعه السياقي Order من نوع عناصر orders
const summaries = orders.map((o) => `#${o.id}: ${o.total}`);

// تأشيرة المتغير توفر سياقًا أيضًا
type ClickHandler = (event: { x: number; y: number }) => void;
const onClick: ClickHandler = (event) => console.log(event.x, event.y);

⚙️ المعاملات

const x: T = ...المواضع التي تُفعّل الاستدلال السياقي: تعليقات أنواع المتغيرات/المعاملات، عناصر المصفوفات، معاملات الاستدعاء (وفق نوع المعامل الشكلي)، وتعبيرات return (مواجهة نوع الإرجاع المُعلن)
(x) => ...معاملات الاستدعاء الراجع بلا تعليق تحصل على نوعها من السياق؛ وإذا كُتب التعليق فيجب أن يكون متوافقًا مع السياق وإلا أخطأ

القيمة المُعادة:تخضع تعبيرات return أيضًا لقيود السياق: فنوع الإرجاع المُعلن يفحص كل return عكسيًا، فيلتقط مبكرًا أخطاء مثل «نسيان return في أحد الفروع».

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

#101: 250, #102: 90, #103: 480
2
click @ 12,34

(مخرجات التشغيل بعد التحويل؛ كتابة o.pric (اسم خاصية مخطئ) في الاستدعاء الراجع تعطي خطأ ترجمة فوريًا — النوع السياقي لا يسمح به)

💡 نقاط مهمة

ℹ️ معلومة الاستدلال السياقي هو تدفق الأنواع «من الخارج إلى الداخل»، عكس الاستدلال العادي (من التعبير إلى المتغير)؛ وعندما يتحقق كلاهما يغلب الطرف صاحب التعليق الصريح.
💡 تلميح وجود تحذير «any ضمني» بجوار معامل استدعاء راجع يعني عادةً أن السياق مفقود (المصفوفة غير مُعلَّمة النوع) — أصلح النوع الخارجي أولًا بدلًا من تعليق الاستدعاء الراجع.
⚠️ تنبيه استدعاءات مثل onChange={(e) => ...} في React تعتمد على الأنواع السياقية؛ وعند استخراجها منفردة (مثلًا بتغليفها في useCallback) عليك إضافة التعليق بنفسك وإلا تدهورت المعاملات إلى any.
المزيد من الحالات قادم قريبًا.

❓ أسئلة شائعة

س هل النوع السياقي والاستدلال النوعي شيء واحد؟
ج لا. الاستدلال العادي «من القيمة إلى النوع» (const x = 5 ← number)؛ أما النوع السياقي «من الموضع إلى القيمة» — يُعرف النوع الهدف أولًا ثم تُستنتج معاملات الدالة المجهولة عكسيًا. وأنواع معاملات الاستدعاءات الراجعة تأتي منه في الغالب.
س لماذا معامل استدعائي الراجع في map من نوع any؟
ج لأن المصفوفة نفسها غير مُعلَّمة النوع (مثلًا من JSON.parse أو تعليق منسٍّ)، فلا يوجد سياق تُستعار منه الأنواع ويصبح المعامل any ضمنيًا؛ علّم نوع عناصر المصفوفة فيُصلَح الأمر.
س هل يسمح النوع السياقي «بتسرب» الأخطاء؟
ج على العكس تمامًا — فهو أساس الفحص. الوصول إلى خاصية غير موجودة في النوع السياقي يعطي خطأً فوريًا (وحتى الحقل الزائد غير مقبول)، وهذا بالضبط سبب قدرته على التقاط أخطاء الأسماء المخطوئة.
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%