أسئلة (TypeScript):
-
إيه الفرق بين Type و Interface؟ وامتى تستخدم كل واحدة؟
الاتنين بيعملوا نفس الحاجة تقريبًا: تعريف شكل البيانات، بس الفرق الأساسي إن الـ interface بيشتغل أكتر مع الـ object والـ class، وبيسمح لك تعمل extends يعني تورث أكتر من Interface. أما الـ type فبيكون أكثر مرونة، تقدر تستخدمه مع الـ union والـ tuples، لكنه مش بيورث زي الـ interface. لو بتتعامل مع كائنات وعايز تورث، استخدم interface، أما لو بتتعامل مع أنواع أكثر تعقيدًا، استخدم type.
-
إيه الفرق بين unknown و any؟ وإمتى تستخدم كل واحد فيهم؟
الاتنين بيستخدموا لما تبقي مش عارف النوع الحقيقي للبيانات، بس الفرق إن any بيسمحلك تستخدم أي حاجة من غير قيود، وده ممكن يسبب أخطاء في الكود. أما unknown فبيجبرك تعمل Type Checking قبل ما تستخدم القيمة، عشان تتأكد إنها النوع اللي مستنيه. الأفضل تستخدم unknown لو بتتعامل مع بيانات جاية من API أو أي مصدر خارجي، عشان تجبر نفسك على الفحص قبل استخدامها.
-
إزاي تقدر تعمل Type Inference في TypeScript؟ وإيه أهميته؟
TypeScript ذكي وبيعرف النوع تلقائيًا في أغلب الحالات، فلو كتبت:
-
إزاي تستخدم Generics في TypeScript؟ وهات مثال عملي؟
الـ Generics بتسمح لك تكتب دوال و interfaces مرنة تشتغل مع أكتر من نوع:
-
إيه الفرق بين optional properties و readonly properties في TypeScript؟
- الـ optional properties (باستخدام ?) معناها إن الخاصية ممكن تكون موجودة أو لا، زي:
- أما readonly properties فمعناها إن القيمة بتتحدد وقت الإنشاء بس ومينفعش تتغير بعد كده:
-
إزاي تقدر تعمل Utility Types زي Pick، Omit، و Partial؟ وليه ممكن تحتاجهم؟
دي أدوات جاهزة في TypeScript بتساعدك تعدّل على الـ types بسهولة:
- Pick: بياخد جزء معين من الـ type ويعمل منه جديد.
- Omit: العكس، بيحذف حاجات من النوع.
- Partial: بيخلي كل الخصائص اختيارية.
-
إزاي تتعامل مع Modules في TypeScript؟ وإيه الفرق بين export و export default؟
لو عندك ملف TypeScript، تقدر تصدر منه كذا متغير أو دالة باستخدام export:
- وتقدر تستورده كده:
- أما export default فبتصدر حاجة واحدة بس، وده بيخليك تستوردها بأي اسم:
-
إزاي تكتب Decorators في TypeScript؟ وليه ممكن تحتاجهم؟
Decorators هي ميزة في TypeScript بتسمح لك تعدّل على الـ classes والـ methods بطريقة مرنة، بس لازم تكون مفعلها في tsconfig.json:
-
إزاي تقدر تعمل Type Narrowing وإيه الطرق المختلفة لتحقيقه؟
Type Narrowing معناه إنك تضيّق نطاق النوع عشان TypeScript يعرف يتعامل معاه بشكل أدق. فيه طرق كتير، منها:
-
إيه هي Enum في TypeScript؟ وإزاي بتشتغل؟
Enum بتستخدم لما يكون عندك مجموعة ثوابت مرتبطة ببعض، زي أيام الأسبوع مثلا:
هيفهم لوحده إن name نوعه string. الفايدة من Type Inference إنك مش مضطر تكتب الأنواع بنفسك دايمًا، فبيخلي الكود أنضف وأوضح.
ده مفيد لما يكون عندك أكواد reusable وعايزها تشتغل مع أكتر من نوع بدل ما تقيدها بنوع معين.
دي مفيدة جدًا لما بتتعامل مع النماذج والـ APIs.
export default بيكون مفيد لو بتصدر حاجة رئيسية واحدة من الملف.
مثال عملي على class decorator:
لما تنشئ Person، هيتطبع اسم الكلاس تلقائيًا. Decorators مفيدة في الـ frameworks زي Angular.
typeof:
instanceof:
in:
Type Narrowing مهم جدًا عشان تضمن إن الكود بيتعامل مع الأنواع الصحيحة بطريقة صحيحة.
تبدأ القيم افتراضيًا من 0، لكن ممكن تحددها بنفسك:
Enum مفيدة لما يكون عندك قيم ثابتة وعايز تسهّل التعامل معاها بدل ما تستخدم Strings أو أرقام عشوائية.
قسم التعليقات