دمج الأسماء المستعارة للأنواع
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 35 من 73.
إن أحد أقوى جوانب الأسماء المستعارة للأنواع (type aliases) هو قدرتها على الدمج وإعادة الاستخدام لإنشاء تعريفات أنواع أكثر تطوراً. فبدلاً من تعريف أنواع معقدة من الصفر في كل مرة، يمكنك بناؤها من خلال تجميع أسماء مستعارة للأنواع أصغر وأكثر تركيزاً معاً.
يعزز هذا النهج إعادة استخدام الكود ويجعل تعريفات الأنواع الخاصة بك أكثر قابلية للصيانة. عندما تحتاج إلى تحديث نوع أساسي، فإن جميع الأنواع المركبة التي تستخدمه ترث التغييرات تلقائيًا:
type Email = string;
type Phone = number;
type Contact = {
name: string;
email: Email;
phone: Phone;
};يمكنك أيضاً دمج الأسماء المستعارة للأنواع (type aliases) ضمن أنواع الاتحاد (union types) لإنشاء هياكل بيانات مرنة. هذا مفيد بشكل خاص عندما قد تقبل خاصية الكائن تنسيقات مختلفة:
type ContactMethod = Email | Phone;
type User = {
id: number;
preferredContact: ContactMethod;
};هذا النهج التركيبي يجعل الكود الخاص بك أكثر تعبيراً وأسهل في الفهم. فبدلاً من رؤية أنواع عامة مثل string أو number، سيفهم المطورون الآخرون على الفور الغرض المقصود من خلال أسماء أنواع ذات معنى مثل Email و Phone.
التحدي
سهلأنشئ اسم مستعار للنوع (type alias) باسم Username للنوع string.
أنشئ اسم مستعار للنوع باسم UserAge للنوع number.
أنشئ اسم مستعار للنوع باسم ContactMethod يجمع بين Username و UserAge باستخدام نوع الاتحاد (union type).
أنشئ اسم مستعار للنوع باسم UserProfile لكائن يحتوي على الخصائص التالية:
idمن نوعnumberdisplayNameمن نوعUsernamepreferredContactمن نوعContactMethod
أنشئ اسم مستعار للنوع باسم AdminProfile يجمع بين UserProfile ونوع كائن إضافي يحتوي على خاصية permissions من نوع string باستخدام أنواع التقاطع (intersection types).
الآن قم بإنشاء المتغيرات التالية:
- أنشئ متغيرًا باسم
regularUserمن نوعUserProfileمع id بقيمة1، و displayName بقيمة"john_doe"، و preferredContact بقيمة"john_doe" - أنشئ متغيرًا باسم
systemAdminمن نوعAdminProfileمع id بقيمة2، و displayName بقيمة"admin"، و preferredContact بقيمة25، و permissions بقيمة"full_access"
أنشئ دالة باسم getContactInfo تقبل معاملًا يسمى contact من نوع ContactMethod وتعيد string. استخدم حارس النوع (type guard) للتحقق من النوع وإرجاع ما يلي:
- إذا كان نصًا (string):
"Contact: [contact]" - إذا كان رقمًا (number):
"Age: [contact]"
اطبع المخرجات التالية في أسطر منفصلة:
- استدعِ
getContactInfoمعregularUser.preferredContactواطبع النتيجة - استدعِ
getContactInfoمعsystemAdmin.preferredContactواطبع النتيجة - اطبع
systemAdmin.permissions
جرّب بنفسك
// TODO: اكتب كودك هنا
// أنشئ أسماء مستعارة للأنواع (type aliases) لكل من Username و UserAge و ContactMethod و UserProfile و AdminProfile
// أنشئ المتغيرات regularUser و systemAdmin
// أنشئ الدالة getContactInfo
// اطبع المخرجات المطلوبةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى TypeScript
1البداية مع TS
ما هي TypeScript؟لماذا نستخدم TypeScript؟أول كود TypeScript لكعملية الـ Compilation والأخطاءملخص: مقدمة في TS4التعامل مع الدوال
تحديد أنواع المعاملات وقيم الإرجاعتحديد أنواع Arrow Functionsنوع الإرجاع 'void'المعاملات الاختيارية باستخدام '?'القيم الافتراضية للمعاملاتتحديد أنواع Rest Parametersتعريف أنواع الدوالملخص: بناء دوال محددة الأنواع2الأنواع الأساسية
الأنواع الأساسية: str, num, booleanالنوع 'any': مخرج الهروبالنوع 'unknown'التعامل مع 'null' و 'undef'استنتاج الأنواع في التطبيق العمليتوضيحات الأنواع الصريحةمراجعة: تدريب على الأنواع الأساسية5الأنواع: الأسماء المستعارة، الاتحادات والتقاطعات
الأسماء المستعارة للأنواع الأساسية (Primitives)أنواع الاتحاد ('|')التعامل مع أنواع الاتحادالأنواع الحرفية (Literal Types)أنواع التقاطع ('&')دمج الأسماء المستعارة للأنواعملخص: تركيبات الأنواع المتقدمة3هياكل البيانات: المصفوفات و Tuple
المصفوفات محددة النوع (Typed Arrays)معدل 'readonly' للمصفوفاتما هو الـ Tuple؟تعريف والوصول إلى الـ Tuplesتفكيك الـ Tuples (Destructuring)الـ Tuples للقراءة فقط (Readonly)المصفوفات محددة النوع متعددة الأبعاداستخدام Spread Operator مع المصفوفاتملخص: المصفوفات و Tuples6تحديد أنواع الكائنات والواجهات
توصيف أنواع الكائنات المضمنة (Inline)الأسماء المستعارة للأنواع (Type Aliases) للكائناتمقدمة عن الواجهات (Interfaces)الواجهات (Interfaces) مقابل الأسماء المستعارة للأنواع (Type Aliases)الخصائص الاختيارية وخصائص القراءة فقط (Readonly)توسيع الواجهات والأنواعإضافة الدوال (Methods) إلى الواجهاتملخص: تحديد هياكل الكائناتتدرّب بنفسك: مترجم JavaScript عبر الإنترنت