infer الكلمة المفتاحية infer

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

infer الكلمة المفتاحية infer

تقوم infer في فرع الصواب للنوع الشرطي بـ«التقاط» النوع: T extends Array<infer U> ? U : never تعني «إذا كان T مصفوفة، فاستخرج نوع عناصره وأطلق عليه اسم U». وهي ترفع المطابقة من «مطابقة ثم إهمال» إلى «مطابقة واستخراج»، وهي جوهر أنواع الأدوات مثل Unwrap وReturnType.

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

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

📝 الصيغة

type ItemOf<T> = T extends Array<infer U> ? U : never;

type A = ItemOf<string[]>;   // string
type B = ItemOf<number[]>;   // number

// يمكن لـ infer أن يظهر في أي موضع من النمط
type FirstArg<T> = T extends (first: infer A, ...rest: any[]) => any ? A : never;

⚙️ المعاملات

infer Uتصريح موضع نوع: أثناء مطابقة extends يُلتقط نوع الموضع في U
T extends X ? U : Yنطاق U: يكون نافذًا فقط داخل فرع الصواب للنوع الشرطي الحالي، وغير مرئي خارجه

القيمة المُعادة:infer بذاتها ليست نوعًا بل «ربط» يحدث أثناء عملية المطابقة؛ وقيمة الإرجاع للنوع الشرطي كله تُحسب بمشاركة نتيجة الالتقاط.

▶ مثال

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

الناتج:

11 A

(مخرجات التشغيل بعد التحويل؛ n و s هما number و string في وقت الترجمة — فقد استخرج infer نوع العناصر من نوع المصفوفة)

💡 نقاط مهمة

ℹ️ معلومة يمكن لـ infer الظهور في أي موضع في نمط extends: فـ Promise<infer U> تلتقط نوع resolve، و [any, infer R] تلتقط الموضع الثاني من المجموعة، و (x: infer P) => any تلتقط المعامل — الموضع هو الدلالة.
💡 تلميح تكرار infer بالاسم نفسه يؤدي إلى «دمج الالتقاط»: [infer T, infer T] تطابق [number, number] فتعطي number، وتفشل عند المطابقة مع [string, number] — فحص طبيعي لـ«اتساق النوع».
⚠️ تنبيه لا يمكن استخدام infer إلا داخل جملة extends للنوع الشرطي، وكتابة type U = infer X منفردةً خطأ صياغة؛ ولا يمكن الإشارة إلى U في فرع الفشل أيضًا.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س ما الفرق بين infer ومعامل النوع العام <T>؟
ج معامل النوع العام «يُعطى من المستدعي»، بينما infer «يُستخرج من نوع موجود». الأول يصرح بالمدخل والثاني يستخرج المعلومات — فـ ReturnType<T> يستدل بالـ infer على قيمة الإرجاع من نوع الدالة.
س ماذا يكون U الملتقط عندما يفشل التطابق؟
ج لا تطابق يعني لا ربط — ينتقل التنفيذ مباشرة إلى فرع الفشل. لذا يُكتب في فرع الفشل عادةً never أو unknown كشبكة أمان.
س أي أدوات مدمجة تستخدم infer؟
ج ReturnType وParameters وConstructorParameters وAwaited وغيرها: كلها ضربة مركبة من extends + infer؛ فبمجرد إتقان infer تصبح قادرًا على فهم نصف شيفرة أنواع الأدوات تقريبًا.
Web-Tutorial.com

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

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

100%