الأنواع الشرطية والمُعيّنة في React
أنشئ أنواع خصائص للمكوّنات يتغير شكلها بناءً على قيم خصائص أخرى باستخدام الأنواع الشرطية.
الأنواع الشرطية والمُعيّنة في React درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
أساسيات الأنواع الشرطية
يستخدم النوع الشرطي الصيغة T extends U ? X : Y — فإذا كان بالإمكان إسناد T إلى U، يتحول النوع إلى X، وإلا يتحول إلى Y.
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
type C = IsString<'hello'>; // trueالخصائص الشرطية بناءً على خصائص أخرى
استخدم الأنواع الشرطية لجعل إحدى الخصائص مطلوبة أو اختيارية بناءً على قيمة خاصية أخرى.
type InputProps<T extends 'text' | 'number'> = {
type: T;
} & (T extends 'number' ? { min?: number; max?: number } : { maxLength?: number });
const numInput: InputProps<'number'> = { type: 'number', min: 0, max: 100 };
const txtInput: InputProps<'text'> = { type: 'text', maxLength: 50 };الأنواع المُحوَّلة
تنشئ الأنواع المُحوَّلة نوعًا جديدًا من خلال تحويل كل خاصية في نوع موجود. وتتكرر صيغة in keyof على جميع المفاتيح.
type Optional<T> = { [K in keyof T]?: T[K] };
type Readonly<T> = { readonly [K in keyof T]: T[K] };
type Nullable<T> = { [K in keyof T]: T[K] | null };جعل الخصائص اختيارية لنماذج التحديث
استخدم Partial<T> (وهو نوع مُحوَّل مضمّن) لخصائص نماذج التحديث التي لا تكون فيها جميع الحقول مطلوبة.
interface User { id: string; name: string; email: string; role: string; }
// Update form — all fields optional:
type UserUpdateProps = Partial<Omit<User, 'id'>>;
function UserUpdateForm(props: UserUpdateProps) {
// name, email, role are all optional
}Record مع الأنواع المُحوَّلة
أنشئ أنواع بحث تأتي مفاتيحها من اتحاد، وتكون قيمها ذات بنية متسقة.
type Status = 'idle' | 'loading' | 'success' | 'error';
type StatusConfig = Record<Status, {
label: string;
icon: React.ReactNode;
color: string;
}>;
const statusConfig: StatusConfig = {
idle: { label: 'Ready', icon: <ReadyIcon />, color: 'gray' },
loading: { label: 'Loading...', icon: <Spinner />, color: 'blue' },
success: { label: 'Done', icon: <CheckIcon />, color: 'green' },
error: { label: 'Error', icon: <XIcon />, color: 'red' },
};استخراج المفاتيح المطلوبة
استخدم الأنواع الشرطية مع -? (لإزالة الاختيارية) لاستخراج المفاتيح المطلوبة فقط من النوع.
type RequiredKeys<T> = {
[K in keyof T]-?: undefined extends T[K] ? never : K;
}[keyof T];
interface FormData { name: string; email: string; phone?: string; }
type Required = RequiredKeys<FormData>; // 'name' | 'email'أنواع القوالب الحرفية
تجمع أنواع القوالب الحرفية أنواع السلاسل الحرفية، مما يتيح كتابة أسماء الأحداث وسلاسل فئات CSS ومسارات API مع التحقق من الأنواع.
type EventName = 'click' | 'change' | 'focus';
type HandlerName = `on${Capitalize<EventName>}`;
// 'onClick' | 'onChange' | 'onFocus'
type ApiPath<R extends string> = `/api/${R}`;
type UserPath = ApiPath<'users'>; // '/api/users'استخراج الخصائص بشكل شرطي
استخدم Extract وExclude لتصفية أنواع الاتحادات.
type AllProps = 'onClick' | 'onHover' | 'onChange' | 'style';
type EventHandlers = Extract<AllProps, `on${string}`>;
// 'onClick' | 'onHover' | 'onChange'
type NonEventProps = Exclude<AllProps, `on${string}`>;
// 'style'الأنواع المُحوَّلة للتحقق من النماذج
أنشئ أنواعًا لأخطاء التحقق تعكس بنية بيانات النموذج، بحيث توجد رسالة خطأ نصية واحدة لكل حقل.
interface LoginForm { email: string; password: string; }
type FormErrors<T> = { [K in keyof T]?: string };
type LoginErrors = FormErrors<LoginForm>;
// { email?: string; password?: string }
const errors: LoginErrors = { email: 'Invalid email format' };الأنواع المُحوَّلة المميّزة
اجمع الأنواع المُحوَّلة مع الأنواع الشرطية لإنشاء أنواع يتغير شكلها بناءً على حقل التمييز.
type EventMap = {
click: { x: number; y: number };
keydown: { key: string; code: string };
resize: { width: number; height: number };
};
type Handler<E extends keyof EventMap> = (event: EventMap[E]) => void;
function on<E extends keyof EventMap>(event: E, handler: Handler<E>) {
window.addEventListener(event, handler as EventListener);
}متى لا تُفرط في هندسة الأنواع
تضيف الأنواع الشرطية والمُحوَّلة قوة، لكنها تضيف التعقيد أيضًا. استخدمها عندما تزيل تكرارًا حقيقيًا أو تمنع أخطاء فعلية، لا لمجرد استعراض معرفتك بـ TypeScript.
تحقق سريع
ماذا يفعل النوع المُحوَّل { [K in keyof T]?: T[K] }؟
مراجعة
تنشئ الأنواع الشرطية (T extends U ? X : Y) أنواعًا تتفرع بناءً على قابلية الإسناد. وتحول الأنواع المُحوَّلة ([K in keyof T]) كل خاصية في النوع. استخدمها لإنشاء أنواع جزئية لنماذج التحديث، وخرائط أحداث مقيّدة بالأنواع، وأشكال أخطاء النماذج، ومسارات API باستخدام القوالب الحرفية.
الأسئلة الشائعة
هل درس «الأنواع الشرطية والمُعيّنة في React» مجاني؟
نعم — نص درس «الأنواع الشرطية والمُعيّنة في React» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «الأنواع الشرطية والمُعيّنة في React»؟
أنشئ أنواع خصائص للمكوّنات يتغير شكلها بناءً على قيم خصائص أخرى باستخدام الأنواع الشرطية. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الأنواع الشرطية والمُعيّنة في React»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الاتحادات المميّزة لأشكال المكوّنات
- الأنواع الشرطية والمُعيّنة في React
- المكوّنات متعددة الأشكال باستخدام خاصية 'as'
- النماذج الآمنة نوعيًا وعقود استجابات API