كيف تجتاز مقابلة TypeScript: أهم الأسئلة مع أمثلة
لقد رسّخ TypeScript مكانته كمعيار لتطوير المؤسسات (enterprise) باستخدام JavaScript. إذا كنت تستعد لمقابلة عمل، فمن المهم ألا تعرف بناء الجملة فحسب، بل أن تفهم أيضًا كيفية عمل الأنواع (types) والأدوية (generics) والأدوات المساعدة (utilities). في هذه المقالة، قمنا بتحليل أهم الأسئلة التي تُطرح غالبًا في المقابلات التقنية، مع إجابات مفصلة وأمثلة برمجية.
ستكون هذه المادة مفيدة لمطوري المستوى المبتدئ (junior) وكذلك لأولئك الذين يرغبون في تحديث معلوماتهم قبل لقاء مهم.
1. ما هو TypeScript ولماذا هو مطلوب؟
TypeScript هي مجموعة شاملة (superset) من JavaScript مكتوبة بشكل صارم (strictly typed)، ويتم تجميعها إلى JS عادي. الهدف الرئيسي هو إضافة كتابة ثابتة (static typing)، مما يسمح بـ:
- اكتشاف الأخطاء في مرحلة التجميع (compile time) وليس في وقت التشغيل (runtime).
- تحسين قابلية قراءة الكود وصيانته.
- الحصول على الإكمال التلقائي (autocompletion) وإعادة الهيكلة (refactoring) في بيئة التطوير المتكاملة (IDE).
مثال:
// JavaScriptfunction add(a, b) { return a + b; // a و b يمكن أن يكونا أي شيء}
// TypeScriptfunction add(a: number, b: number): number { return a + b; // خطأ في التجميع إذا تم تمرير نص (string)}في المقابلة، من المهم التأكيد على أن TypeScript لا يستبدل JavaScript، بل يكمله، مما يجعل الكود أكثر أمانًا.
2. الأنواع الأساسية (Basic Types) واستخدامها
يقدم TypeScript مجموعة واسعة من الأنواع الأساسية. الأسئلة حول هذا الموضوع تختبر فهمك لنظام الأنواع.
اذكر الأنواع الرئيسية:
number,string,booleannull,undefinedany— يعطل التحقق من الأنواع (حاول تجنبه)void— للدوال التي لا تُرجع شيئًاnever— للدوال التي لا تنتهي أبدًا (على سبيل المثال، تطرح استثناءً)
مثال مع أنواع الاتحاد (union types):
type Status = 'active' | 'inactive' | 'pending';let userStatus: Status = 'active'; // واحدة فقط من القيم الثلاثغالبًا ما يُسأل عن الفرق بين interface و type. الإجابة: interface يمكن توسيعه (extends)، بينما type لا يمكن. بالنسبة للكائنات (objects)، يُفضل استخدام interface، أما بالنسبة للبدائيات (primitives) وأنواع الاتحاد (union) فاستخدم type.
3. الأدوية (Generics) — أساس المرونة
تسمح الأدوية (Generics) بإنشاء مكونات تعمل مع أنواع مختلفة دون فقدان الكتابة (typing). هذا هو أحد أكثر الأسئلة شيوعًا.
مثال على دواء (generic) بسيط:
function identity<T>(arg: T): T { return arg;}const result = identity<string>('hello'); // النوع stringconst numberResult = identity(42); // النوع number (استنتاج النوع)سؤال: كيف تقيد دواء (generic)؟
استخدم الكلمة المفتاحية extends:
function getLength<T extends { length: number }>(arg: T): number { return arg.length;}getLength('hello'); // 5getLength([1,2,3]); // 3// getLength(123); // خطأ: number ليس له lengthسيُسأل أيضًا عن الأدوية (generics) في الواجهات (interfaces):
interface ApiResponse<T> { data: T; status: number; error?: string;}const userResponse: ApiResponse<{ id: number; name: string }> = { data: { id: 1, name: 'Alice' }, status: 200};4. الأنواع المساعدة (Utility Types)
الأدوات المساعدة المضمنة في TypeScript تُبسّط التعامل مع الأنواع. معرفتها هي علامة على مطور متمرس.
أهم 5 أدوات مساعدة يجب معرفتها:
Partial<T>— يجعل جميع الحقول اختيارية (optional).Required<T>— يجعل جميع الحقول إلزامية (required).Pick<T, K>— يختار فقط المفاتيح المحددة.