أنواع الأدوات: Partial وRequired وPick وOmit
حوّل الأنواع الموجودة باستخدام أنواع الأدوات المضمّنة لإنشاء صيغ مختلفة دون تكرار.
أنواع الأدوات: Partial وRequired وPick وOmit درس مجاني في Frontend Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Frontend Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Frontend Academy 4 دروس في المجموع.
أنواع الأدوات المساعدة المضمّنة
يأتي TypeScript مع مجموعة من أنواع الأدوات المساعدة العامة التي تحوّل أنواعًا أخرى. وهي تلغي الحاجة إلى إعادة كتابة تنويعات مشابهة للواجهات يدويًا.
Partial<T>
يجعل جميع خصائص T اختيارية. وهو مناسب تمامًا لحمولات التحديث أو التصحيح التي لا يلزم فيها توفير جميع الحقول.
interface User { name: string; email: string; age: number; }
function updateUser(id: string, changes: Partial<User>) {
// changes.name is string | undefined
// changes.email is string | undefined
}
updateUser('1', { name: 'Bob' }); // only update nameRequired<T>
هو عكس Partial، إذ يجعل جميع الخصائص مطلوبة ويزيل محددات الاختيارية (؟).
interface Config {
host?: string;
port?: number;
debug?: boolean;
}
function validate(config: Required<Config>) {
// All three are now required
console.log(config.host, config.port, config.debug);
}Pick<T, K>
ينشئ نوعًا لا يحتوي إلا على الخصائص المحددة من T. ويفيد في تقليص الكائنات الكبيرة إلى الحقول التي تحتاج إليها فقط.
interface User { id: number; name: string; email: string; password: string; }
type PublicUser = Pick<User, 'id' | 'name' | 'email'>;
// { id: number; name: string; email: string }
// password is excluded — safe to send to clientOmit<T, K>
ينشئ نوعًا تُزال منه الخصائص المحددة. وهو عكس Pick.
type UserWithoutPassword = Omit<User, 'password'>;
// { id: number; name: string; email: string }
type CreateUserDto = Omit<User, 'id'>; // new users don't have an id yetReadonly<T>
يجعل جميع الخصائص للقراءة فقط، ويمنع إعادة إسنادها. ويفيد في كائنات الإعدادات والبيانات غير القابلة للتغيير.
const config: Readonly<Config> = {
host: 'localhost',
port: 3000,
};
config.port = 8080; // Error: cannot assign to 'port' because it is read-onlyRecord<K, V>
ينشئ نوع كائن تكون مفاتيحه من النوع K وقيمه من النوع V. وهو أوضح من توقيع فهرس خام عندما تكون المفاتيح اتحادًا معلومًا.
type Role = 'admin' | 'editor' | 'viewer';
type Permissions = Record<Role, { canEdit: boolean; canDelete: boolean }>;
const perms: Permissions = {
admin: { canEdit: true, canDelete: true },
editor: { canEdit: true, canDelete: false },
viewer: { canEdit: false, canDelete: false },
};ReturnType<T> و Parameters<T>
يستخرجان نوع القيمة المعادة وأنواع معاملات دالة. ويفيدان عندما لا تتمكن من استيراد نوع، لكنك تحتاج إلى مطابقة توقيع دالة.
function fetchUser(id: number) {
return { id, name: 'Alice' };
}
type UserResult = ReturnType<typeof fetchUser>; // { id: number; name: string }
type FetchParams = Parameters<typeof fetchUser>; // [id: number]Awaited<T>
يزيل تغليف نوع Promise ليحصل على نوع القيمة التي تحلّ إليها. ويفيد عند العمل مع الدوال غير المتزامنة.
type UserResponse = Awaited<ReturnType<typeof fetchUser>>;
// Resolves both the function return and the Promise
async function load() { return { user: { name: 'Alice' } }; }
type Loaded = Awaited<ReturnType<typeof load>>; // { user: { name: string } }Extract<T, U> و Exclude<T, U>
يُبقي Extract<T, U> على الأنواع الموجودة في T والقابلة للإسناد إلى U فقط. أما Exclude<T, U> فيزيلها.
type A = 'a' | 'b' | 'c' | 'd';
type BC = Extract<A, 'b' | 'c' | 'e'>; // 'b' | 'c'
type AD = Exclude<A, 'b' | 'c'>; // 'a' | 'd'
// NonNullable removes null and undefined:
type T = string | null | undefined;
type NonNull = NonNullable<T>; // stringتركيب أنواع الأدوات المساعدة
يمكن تركيب أنواع الأدوات المساعدة لإنشاء أنواع دقيقة.
type UpdatePayload<T> = Partial<Omit<T, 'id' | 'createdAt'>>;
// Use for PATCH endpoints — omit immutable fields, make rest optional
function patch(id: string, data: UpdatePayload<User>) {
// data can have any subset of mutable user fields
}تحقق سريع
أي نوع من أنواع الأدوات المساعدة يزيل مفاتيح محددة من واجهة؟
مراجعة: أنواع الأدوات المساعدة
يجعل Partial جميع الحقول اختيارية. ويزيل Required محددات الاختيارية. ويُبقي Pick المفاتيح المحددة. ويزيل Omit المفاتيح المحددة. ويمنع Readonly التعديل. ويربط Record مفاتيح الاتحاد بأنواع القيم. ويستخرج ReturnType وParameters أنواع الدوال. ادمج الأدوات المساعدة لإنشاء أنواع DTO دقيقة.
الأسئلة الشائعة
هل درس «أنواع الأدوات: Partial وRequired وPick وOmit» مجاني؟
نعم — نص درس «أنواع الأدوات: Partial وRequired وPick وOmit» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Frontend Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Frontend Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنواع الأدوات: Partial وRequired وPick وOmit»؟
حوّل الأنواع الموجودة باستخدام أنواع الأدوات المضمّنة لإنشاء صيغ مختلفة دون تكرار. تتمرن على Frontend Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Frontend Academy؟
لا تُشترط خبرة سابقة. Frontend Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «أنواع الأدوات: Partial وRequired وPick وOmit»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Frontend Academy هذا؟
نعم. كل درس في Frontend Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأنواع العامة: T وextends والقيود
- أنواع الأدوات: Partial وRequired وPick وOmit
- الأنواع المعتمدة على التعيين والأنواع الشرطية
- تضييق الأنواع: typeof وinstanceof والاتحادات المميّزة