Parameters<T> Parameters (مع ConstructorParameters/InstanceType)

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

Parameters<T> Parameters (مع ConstructorParameters/InstanceType)

يستخرج Parameters<T> قائمة معاملات نوع الدالة T بوصفها نوع صف (tuple). وبه يمكنك تخزين «حزمة وسائط» ونقلها وتمريرها ككتلة دون كتابة قوائم معاملات مثل [string, number, string?] يدويًا.

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

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

📝 الصيغة

type Parameters<T extends (...args: any) => any> =
  T extends (...args: infer P) => any ? P : never;

// الاستخدام
type SessionArgs = Parameters<typeof createSession>;  // [string, number, string?]

⚙️ المعاملات

Tنوع دالة؛ ومن الناحية العملية يُحصل عليه دائمًا تقريبًا عبر typeof fn

القيمة المُعادة:نوع صف: يقابل معاملات T واحدًا تلو الآخر (متضمنًا الاختياري والباقي)؛ ويكون never إذا لم يكن T نوع دالة.

▶ مثال

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

الناتج:

session(u-7, 3600s, default)
retry -> session(u-7, 60s, admin)

(مخرجات التشغيل بعد الترجمة؛ على مستوى النوع: SessionArgs هو [string, number, string?] — فأي تعديل في توقيع createSession ينعكس على الصف تلقائيًا)

💡 نقاط مهمة

ℹ️ معلومة يستند التطبيق كذلك إلى infer: يُلتقط قائمة المعاملات بوصفها صفًا P. تظهر المعاملات الاختيارية في الصف بصيغة string? والمعاملات الباقية بصيغة ...string[].
⚠️ تنبيه مثل ReturnType، تُستخرج مع الدوال المحمَّلة فوق طاقتها قائمة معاملات آخر تحميل فقط.
💡 تلميح أدوات العائلة ذاتها: ConstructorParameters<T> لمعاملات الباني وInstanceType<T> لأنواع نسخ الصنف وThisParameterType<T> لنوع this. وتلمع هذه العائلة عند تغليف APIs خارجية.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س هل يمكن نشر الصف المستخرج مباشرة في استدعاء؟
ج نعم — وهذا استخدامه الشهير: createSession(...args). يفحص TS الموضع والعدد والأنواع مقابل الصف؛ فالوسائط الزائدة أو الناقصة تعطي خطأ ترجمة.
س كيف أضيف معاملًا إلى نتيجة Parameters؟
ج تتسلسل الصفوف: type Logged<P extends any[]> = [...P, requestId: string]. وبالجمع مع Parameters يمكن بناء تواقيع «الوسائط الأصلية زائد إضافات» — حيلة مألوفة في الزخارف وبرمجيات الوسيط (middleware).
س هل تعمل Parameters<typeof Class>؟
ج الصنف نفسه دالّة بانية ونوع typeof Class يحمل توقيع بناء. لاستخراج معاملات الباني استخدم ConstructorParameters<typeof Class> المخصص؛ أما Parameters المباشرة فتعطي never (لا يوجد توقيع استدعاء عادي مطابق).
Web-Tutorial.com

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

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

100%