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) يصحّح الحمولة ويستنتج النوع.