كيف تجتاز مقابلة TypeScript: أهم الأسئلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف تجتاز مقابلة TypeScript: أهم الأسئلة



احتل TypeScript مكانة قوية كواحدة من أكثر الأدوات المطلوبة في تطوير الويب الحديث. إذا كنت تستعد لمقابلة فنية، فإن معرفة الأساسيات والميزات المتقدمة لـ TypeScript شرط أساسي. في هذه المقالة، سنستعرض أهم الأسئلة التي تُطرح غالباً في المقابلات، وسنقدم أمثلة على الكود لتثبيت المادة.



1. الأنواع الأساسية واختلافها عن JavaScript

في المقابلة، سيُطلب منك بالتأكيد الحديث عن الأنواع الأساسية في TypeScript وسلوكها. الفرق الرئيسي عن JavaScript هو التصنيف الثابت (static typing). دعنا نستعرض النقاط الرئيسية.



1.1. الأنواع البدائية: string، number، boolean

يضيف TypeScript تعليقات توضيحية صريحة للأنواع. على سبيل المثال:

let name: string = 'Анна';let age: number = 30;let isActive: boolean = true;

بدون التعليق التوضيحي، يستنتج TypeScript النوع تلقائياً (type inference).



1.2. النوع any و unknown

any يعطل التحقق من الأنواع - من الأفضل تجنبه. unknown هو بديل آمن، يتطلب التحقق قبل الاستخدام:

let data: unknown = 'строка';// console.log(data.toUpperCase()); // خطأ!if (typeof data === 'string') {  console.log(data.toUpperCase()); // صحيح}


1.3. never و void

  • void - الدالة لا تُرجع شيئاً.
  • never - الدالة لا تنتهي أبداً (تطرح خطأ أو حلقة لا نهائية).
function throwError(msg: string): never {  throw new Error(msg);}


2. الواجهات والأنواع (interface vs type)

هذا من أكثر الأسئلة شيوعاً. كلا الآليتين تسمحان بوصف بنية الكائنات، لكن هناك اختلافات.



2.1. متى نستخدم interface

  • لإعلان عقود الكائنات والكلاسات.
  • إمكانية التوسيع (declaration merging):
interface User {  name: string;}interface User {  age: number;}// User الآن يحتوي على name و age


2.2. متى نستخدم type

  • للاتحادات (union)، التقاطعات (intersection) والأسماء المستعارة البدائية.
  • لا يدعم declaration merging.
type Status = 'active' | 'inactive';type Person = { name: string } & { age: number };

سؤال في المقابلة: «هل يمكن استبدال interface بـ type؟» — نعم، لكن للكلاسات والتوسيع، interface أفضل.



3. الأدوية (Generics)

تسمح الأدوية بإنشاء مكونات قابلة لإعادة الاستخدام تعمل مع أي أنواع. هذا أمر لا غنى عنه للمناصب العليا (senior).



3.1. دالة دوائية بسيطة

function firstElement<T>(arr: T[]): T {  return arr[0];}const num = firstElement([1, 2, 3]); // numberconst str = firstElement(['a', 'b']); // string


3.2. قيود الأدوية (extends)

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {  return obj[key];}const user = { name: 'Иван', age: 25 };console.log(getProperty(user, 'name')); // Иван


3.3. الأدوية في الواجهات

interface Repository<T> {  getById(id: number): T;  save(item: T): void;}

غالباً ما يُسأل: «لماذا نحتاج الأدوية إذا كان هناك any؟» — الأدوية تحافظ على أمان الأنواع.



4. الأنواع المساعدة (Utility Types) والإمكانيات المتقدمة

الأنواع المساعدة المضمنة (Partial, Required, Pick, Omit) هي مؤشرات على الفهم العميق لـ TypeScript.



4.1. Partial و Required

interface Task {  title: string;  done: boolean;}const partialTask: Partial                

المدونات

توصيات الكتب