Typed Props عقود أنواع الـ Props

آخر تحديث: 2026-11-03

Typed Props عقود أنواع الـ Props

في TypeScript تبني بـ interface أو type عقدًا للـ props: تُلتقط الأسماء الخاطئة والناقصة وغير المطابقة من النوع وقت الترجمة، ويكتسب المحرّر إكمالًا تلقائيًا. ضع شكلًا نوعيًا على وسائط المكوّن فيبقى تكلفة وقت التشغيل صفرًا. والعقد يوثّق المكوّن للقارئ القادم، فتُكتب واجهة المكوّن في مكان واحد.

المجموعةالبيانات والهندسة
النوعنمط

ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.

📝 الصيغة

type User = { id: number; name: string; vip?: boolean }  // ? marks an optional property

type UserCardProps = {
  user: User
  onSelect: (id: number) => void     // callback: annotate both the parameters and the return type
  children?: React.ReactNode         // any renderable content
}

function UserCard({ user, onSelect }: UserCardProps) {
  return <li onClick={() => onSelect(user.id)}>{user.name}</li>
}

// ❌ Compile error: <UserCard user={{ id: 'x' }} />  id should be a number

القيمة المرجعة:لا قيمة مرجعة؛ إنها نمط برمجي وليست واجهة قابلة للاستدعاء.

▶ مثال

المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.

الناتج:

يُظهر الجدول عقد props الخاص بـ UserCard؛ والنقر على مستخدم يُطلق رد نداء onSelect ويطبع id — في مشروع TypeScript حقيقي سيُفشل نوع خاطئ وقت الترجمة (عرض JSX وقت التشغيل).

💡 النقاط الأساسية

💡 نصيحة استنتج نوع props من المكوّن بـ React.ComponentProps<typeof UserCard> بدل صيانة تعريفين مكررين.
ℹ️ ملاحظة React.ReactNode أعمّ أنواع children (يقبل العناصر والسلاسل والمصفوفات)؛ واستخدم React.ReactElement للعناصر وحدها.
⚠️ تحذير any تُعطّل الفحص؛ وعند شكّ في الشكل استخدم unknown واضيّقه، أو حسّنه تدريجيًا بأنواع أدوات مثل Partial وPick.
المزيد من الحالات قريباً.

📚 دروس ذات صلة

❓ الأسئلة الشائعة

س هل أستخدم type أم interface لـ props؟
ج كلاهما يعمل. interface يمكن دمجها بالإعلان وتُبلغ أخطاءً ألطف، وtype يعبّر اتحادات وتركيبات أنواع الأدوات. فقط واظب على الاتساق في الفريق.
س كيف تتعاون الخصائص الاختيارية مع القيم الافتراضية؟
ج vip?: boolean يسمح بحذفها، والقيمة الافتراضية في التفكيك function X({ vip = false }: Props) تعطيها بديلًا؛ فيتوافق الاثنان.
س هل يصحّح TypeScript وقت التشغيل؟
ج لا، TypeScript يعمل وقت الترجمة فقط. ولتحقّق بيانات الواجهة وقت التشغيل استخدم zod: z.object({...}).parse(data) يصحّح الحمولة ويستنتج النوع.
Web-Tutorial.com

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

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

100%