مقدمة: لماذا يتحدث الجميع عن TypeScript؟
\nإذا كنت تتابع اتجاهات تطوير الويب، فمن المؤكد أنك لاحظت أنه في السنوات 5-7 الماضية، أصبحت عبارة "TypeScript" تُسمع من كل حدب وصوب. المشاريع الكبيرة، الشركات الناشئة، وحتى شركات المؤسسات المحافظة تنتقل بنشاط إلى هذه اللغة. ولكن ما السر؟ لماذا أصبحت الإضافة فوق JavaScript العادية، التي ابتكرتها Microsoft، فجأة معيارًا صناعيًا؟ دعنا نستعرض الأمر بالترتيب: من الخلفية التاريخية إلى أمثلة الكود الفعلية.
\n\nتاريخ موجز: كيف ظهر TypeScript وكسب الثقة
\nتم الإعلان عن TypeScript في أكتوبر 2012. مبتكره هو Anders Hejlsberg، المطور المعروف لـ Turbo Pascal و Delphi و C#. في ذلك الوقت، كان تطوير الويب يتزايد تعقيدًا بسرعة: توقفت التطبيقات عن كونها "صفحات بسيطة" وتحولت إلى تطبيقات SPA كاملة (تطبيقات الصفحة الواحدة) على AngularJS و Backbone و React. بدأت JavaScript، بكل مرونتها، تظهر تشققات - خاصة في الفرق الكبيرة حيث يجب صيانة الكود لسنوات.
\nقدم TypeScript حلاً بسيطًا ولكنه عبقري: أخذ كل بناء الجملة وإمكانيات JavaScript (ES5/ES6) وأضاف إليها الكتابة الثابتة (Static Typing)، والأجناس (Generics)، والواجهات (Interfaces)، ونظام أنواع قوي. وفي نفس الوقت، يتم تجميع TypeScript إلى JavaScript عادية تعمل في أي متصفح. لا ثورات - فقط تطور.
\nنمت اللغة ببطء في السنوات الأولى. ولكن بعد إصدار Angular 2 (عام 2016)، الذي كُتب بالكامل باستخدام TypeScript، بدأ الازدهار الحقيقي. اليوم، TypeScript مدعوم من جميع الأطر الرئيسية (React، Vue، Svelte)، ويضم نظامه البيئي ملايين الحزم.
\n\nالأسباب الرئيسية لشعبية TypeScript
\n\n1. الكتابة الثابتة: أخطاء أقل، ثقة أكبر
\nهذه هي "الميزة" الرئيسية لـ TypeScript. في JavaScript العادية، يمكنك تعيين رقم لمتغير، ثم سلسلة نصية، ثم كائن - ولن يقول المترجم شيئًا. في TypeScript، تحدد النوع بوضوح، ويتم اكتشاف الأخطاء في مرحلة كتابة الكود، وليس في وقت التشغيل.
\n// JavaScript - كل شيء سينهار فقط عند التشغيل\nfunction greet(name) {\n return "Hello, " + name.toUpperCase();\n}\nconsole.log(greet(42)); // خطأ: name.toUpperCase is not a function\n\n// TypeScript - تم اكتشاف الخطأ قبل التشغيل\nfunction greet(name: string): string {\n return "Hello, " + name.toUpperCase();\n}\n// console.log(greet(42)); // ❌ خطأ في التجميع: Argument of type 'number' is not assignable to parameter of type 'string'\nهذا ذو قيمة خاصة في المشاريع الكبيرة، حيث يكتب الكود من 10 إلى 50 مطورًا. تعمل الكتابة كتوثيق "أثناء الطيران": ترى فورًا البيانات التي تتوقعها الدالة وما ترجعه.
\n\n2. دعم محسّن لبيئة التطوير المتكاملة (IDE) والإكمال التلقائي
\nيتكامل TypeScript بشكل وثيق مع محررات الكود (VS Code، WebStorm، IntelliJ). بفضل نظام الأنواع، يمكن لبيئة التطوير اقتراح الدوال والخصائص والأنواع مباشرة أثناء الكتابة. هذا يسرع التطوير بنسبة 20-30% ويقلل من عدد الأخطاء الإملائية.
\n// مثال: واجهة المستخدم\ninterface User {\n id: number;\n name: string;\n email: string;\n isActive: boolean;\n}\n\nfunction getUserInfo(user: User): string {\n // IDE ستقترح تلقائيًا user.name، user.email، إلخ.\n return `${user.name} (${user.email})`;\n}\n\n3. الواجهات والأنواع: هيكل بيانات صارم
\nيسمح TypeScript بوصف هياكل البيانات المعقدة باستخدام الواجهات (interface) والأنواع (type). هذا يجعل الكود قابلاً للتنبؤ وموثقًا ذاتيًا.
\n// وصف هيكل الاستجابة من API\ninterface ApiResponse<T> {\n status: number;\n data: T;\n message?: string; // حقل اختياري\n}\n\n// استخدام الأجناس للمرونة\ntype Product = {\n id: number;\n title: string;\n price: number;\n};\n\nasync function fetchProduct(id: number): Promise<ApiResponse<Product>> {\n const response = await fetch(`/api/products/${id}`);\n return respon