(arg) => R أنواع الدوال السهمية
آخر تحديث: 2026-10-22
(arg) => R أنواع الدوال السهمية
الدوال السهمية تحمل صيغة تعليق مدمجة: نقطتان بعد المعاملات، والتعبير هو قيمة الإرجاع. وعند التصريح بنوع الدالة للمتغير صراحةً، يترابط كل شيء في الجسم تلقائيًا — المعاملات وقيمة الإرجاع — وهي الأسلوب الموصى به للاستدعاءات الراجعة لمرة واحدة مثل مقارنات الترتيب.
| المجموعة | الدوال والأصناف |
|---|---|
| النوع | بناء الجملة |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
const byPriceAsc: (a: Product, b: Product) => number = (a, b) => a.price - b.price;
// دالة سهمية عامة (في ملفات .tsx اكتب <T,> لتفادي اللبس مع وسوم JSX)
const identity = <T,>(v: T): T => v;
⚙️ المعاملات
| (a: Product, b: Product) => number | تعليق نوع الدالة للمتغير: تحصل a/b في جسم التنفيذ على أنواعها تلقائيًا |
|---|---|
| <T,>(v: T): T | دالة سهمية عامة: تُكتب معاملات الأنواع قبل قائمة المعاملات؛ والفاصلة الزائدة للتغريد في .tsx |
القيمة المُعادة:في الجسم التعبيري تكون قيمة الإرجاع هي نوع التعبير نفسه؛ وفي الجسم الكتلي تُستخدم return، ويمكن تعليق نوع الإرجاع صراحةً.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
Mouse:89 | Keyboard:199 | Monitor:899
(مخرجات التشغيل بعد التحويل؛ مقارنة تعيد قيمة منطقية (a.price < b.price) خطأ نوعي — فـ sort يتوقع number)
💡 نقاط مهمة
ℹ️ معلومة الدوال السهمية لا تملك this خاصًا بها: في استدعاءات طرق الكائنات ومعالجات الأحداث تُستخدم this الخارجية مباشرةً، وهذا أهم فرق تشغيلي بينها وبين الدوال العادية.
⚠️ تنبيه إرجاع كائن حرفي في جسم تعبيري يتطلب أقواسًا: () => ({ key: v })؛ وكتابة () => { key: v } تُفسَّر كجسم كتلي وتعيد undefined.
💡 تلميح لمقارنة تصاعدية أعِد a.price - b.price (سالب/صفر/موجب)؛ ولا تستخدم القيم المنطقية أبدًا — فطرح القيم المنطقية يعمل بالمصادفة لكنه ملتبس دلاليًا وخاطئ نوعيًا أيضًا.
🏷️ الدوال والأصناف ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س هل تختلف طريقة كتابة النوع بين الدالة السهمية والعادية؟
ج على مستوى النوع متطابقة تمامًا: (params) => returnType في الحالتين. الاختلاف في الدلالات التشغيلية (this وarguments وقابلية الاستخدام مع new).
س لماذا يفشل <T>(v: T) في ملفات .tsx؟
ج لأن الأقواس الزاوية العامة تتعارض مع صيغة وسوم JSX. اكتب <T,> (بفاصلة زائدة) أو <T extends unknown> للتغريد.
س متى يلزم تعليق نوع لمتغير دالة سهمية؟
ج عندما يُسند إلى متغير أو يُخزَّن في كائن أو يُصدَّر كواجهة برمجية — فالتعليق يغذي الجسم بالاستدلال السياقي. أما المواضع المضمّنة ذات أنواع معاملات معروفة (مثل sort(byPriceAsc)) فلا حاجة فيه.