عن المؤسس25 سبتمبر 20264 دقائق قراءة

TypeScript بين الخرافة والحقيقة: عبدالله بن سنكر وأخطاء المشاريع الكبيرة

عبدالله بن سنكر يفصل الخرافة عن الحقيقة في TypeScript: ليش تقلّ الأخطاء مع كبر المشروع، وحدودها وقت التشغيل، وإعدادات strict اللي تفرق فعلاً في كودك.

عبدالله بن سنكر — تايب سكريبت
AZHAL

تايب سكريبت

عبدالله بن سنكر

مشروعك بدأ صغيراً بجافاسكربت، والمطوّر يشتغل بسرعة، وكل شي تمام. بعد سنة صار فيه مئات الملفات، وكل تعديل صغير يكسر شي في مكان ما توقعه أحد، والمطوّر صار يخاف يلمس الكود. عبدالله بن سنكر يبني مواقعه بـ Next.js و TypeScript، وموقع azhal.io نفسه مكتوب بـ TypeScript. وهنا يمرّ على أشهر الأفكار المتداولة عنها، ويفصل الصحيح من الغلط.

«TypeScript لغة ثانية لازم الفريق يتعلمها من الصفر»

غلط. TypeScript هي جافاسكربت مع طبقة أنواع فوقها. أغلب كود جافاسكربت الصالح يشتغل كما هو داخل ملف TypeScript، والفرق إنك تقدر تقول: هذا المتغير رقم، وهذي الدالة ترجع كائناً فيه اسم وبريد. المترجم يقرأ هذي التعريفات، يتأكد إن الكود يحترمها، ثم يحذفها ويطلع جافاسكربت عادية يشغّلها المتصفح أو Node. يعني المطوّر اللي يعرف جافاسكربت يكتب TypeScript من أول يوم، ويتعمق مع الوقت.

«الأنواع تحمي التطبيق وقت التشغيل»

هذي أخطر خرافة، لأنها تعطي أماناً كاذباً. الأنواع تنحذف بعد الترجمة، وما يبقى منها شي وقت التشغيل. لو قلت إن رد الخادم فيه حقل price رقمي، والخادم رجّع نصاً أو ما رجّع الحقل أصلاً، TypeScript ما بيوقفه. الحماية هنا تحتاج تحققاً فعلياً عند الحدود: البيانات الجاية من API خارجي، أو من نموذج يعبّيه المستخدم، أو من متغيرات البيئة. مكتبات مثل zod تتحقق من البيانات وقت التشغيل وتستنتج النوع منها في نفس الوقت، فيصير عندك تعريف واحد يخدم الاثنين. والقاعدة: كل شي يدخل نظامك من برّا، اعتبره unknown لين تتحقق منه. ومثال يتكرر في مشاريع Node: قيمة مثل process.env.DATABASE_URL نوعها نص أو undefined، ولو نسيت تعرّفها في بيئة الإنتاج، الأفضل إن التطبيق يرفض يشتغل من البداية برسالة واضحة، بدل ما ينهار بعد ساعة عند أول استعلام.

«تعقيد زيادة، والاختبارات تكفي»

الاختبارات والأنواع يصطادون أخطاء مختلفة. الاختبار يتأكد إن السيناريو اللي كتبته يشتغل. والأنواع تتأكد إن كل مكان في الكود يحترم الشكل المتفق عليه، حتى الأماكن اللي ما كتبت لها اختباراً. وفيه فئة كاملة من الأخطاء تختفي تقريباً: استدعاء دالة بعدد معاملات غلط، والوصول لخاصية مكتوبة بحرف خطأ، ونسيان إن القيمة ممكن تكون null. هذا الأخير لحاله وراء عدد كبير من أعطال الواجهات، ورسالة «cannot read properties of undefined» يعرفها أي مطوّر جافاسكربت عن ظهر قلب.

الحقيقة اللي تفرق مع كبر المشروع

قيمة TypeScript الحقيقية ما تبان في الأسبوع الأول، تبان يوم تعدّل. خذ مثالاً: قررت تغيّر اسم حقل في بيانات العميل من phone إلى mobile. في جافاسكربت، تبحث بالنص وتتمنى إنك ما نسيت مكاناً. في TypeScript، تغيّر التعريف، والمترجم يطلع لك قائمة بكل ملف انكسر. التعديل اللي كان مخاطرة صار قائمة مهام.

  • إعادة التسمية الآمنة: المحرّر يغيّر اسم الدالة أو الحقل في كل المشروع بضغطة، لأنه يفهم الكود مو بس النص.
  • الاتحادات المميّزة: تعرّف حالة الطلب كـ «قيد التحميل» أو «نجاح ومعه بيانات» أو «فشل ومعه رسالة»، والمترجم يمنعك تقرأ البيانات في حالة الفشل.
  • توثيق ما يتقادم: نوع الدالة يقول لك وش تاخذ ووش ترجع، وما يصير قديماً لأن المترجم يفرض تحديثه مع الكود.
  • الإكمال التلقائي: المحرّر يقترح الحقول الصحيحة، فالمطوّر الجديد يفهم شكل البيانات بدون ما يفتح عشرة ملفات.
  • عقد مكتوب بين الفريق: لما يشتغل واحد على الواجهة وواحد على الخادم، النوع المشترك هو الاتفاق بينهم.

«كتبنا TypeScript، خلاص المشروع في أمان»

TypeScript بإعدادات متساهلة ما تحمي كثير. هذي العادات اللي تفرق:

  • شغّل وضع strict في ملف tsconfig من أول يوم. تشغيله على مشروع قائم بعدين يطلع مئات الأخطاء دفعة وحدة.
  • عامل any كدَين مو كحل. كل any تطفي الفحص في مكانها وتنتشر منه لكل اللي يلمسها. لو ما تعرف النوع، استخدم unknown واجبر نفسك تتحقق.
  • خيار noUncheckedIndexedAccess يذكّرك إن قراءة عنصر من مصفوفة أو قاموس ممكن ترجع undefined. مزعج شوي، لكنه يصطاد أخطاء حقيقية.
  • شغّل فحص الأنواع tsc --noEmit في خط النشر، عشان ما يوصل كود فيه أخطاء أنواع للإنتاج حتى لو تجاهلها أحد في المحرّر.

عندي مشروع جافاسكربت قائم، أبدأ من الصفر؟

لا، وهذي من أكثر النقاط اللي تطمّن أصحاب المشاريع. TypeScript تسمح بالانتقال التدريجي: خيار allowJs يخلّي ملفات جافاسكربت وملفات TypeScript تعيش جنب بعض في نفس المشروع، وتحوّل ملفاً ملفاً. والترتيب الذكي يبدأ من الأماكن اللي يمر منها كل شي: طبقة الاتصال بالخادم، وتعريفات البيانات المشتركة مثل المستخدم والطلب والمنتج. لما تتعرّف هذي، كل ملف يتحوّل بعدها يستفيد منها مباشرة. وحتى قبل التحويل، تقدر تكتب الأنواع في تعليقات JSDoc وتفعّل checkJs، فيبدأ المحرّر ينبهك على الأخطاء داخل ملفات جافاسكربت نفسها. يعني ما فيه يوم توقف فيه الشغل عشان «نحوّل المشروع»، التحويل يمشي مع الشغل العادي.

وأخيراً، متى ما تحتاجها؟ سكربت صغير تشغّله مرة وتنساه، أو نموذج أولي يعيش أسبوعاً لتجربة فكرة، الجافاسكربت فيه كافية. لكن أي مشروع تتوقع إنه يعيش سنة، أو يشتغل عليه أكثر من شخص، أو يستلمه مطوّر ثاني بعدين، TypeScript فيه مو رفاهية. وهذا اللي يمشي عليه عبدالله عبدالرحيم بن سنكر الكندي في مشاريع الويب في منصة أزهل الرقمية: الساعة اللي تنصرف على كتابة الأنواع اليوم، ترجع أياماً من التوفير في كل تعديل بعدها. والعميل يستلم كوداً يقدر أي مطوّر يفهمه، مو كوداً ما يفهمه إلا اللي كتبه.

عندك فكرة؟ الاستشارة الأولى علينا

كلّم عبدالله مباشرة على واتساب — رسالتك توصل له هو، مو لرد آلي. نسمع فكرتك ونقول لك وش تحتاج وكم تكلّف، ببلاش.

مقالات ذات صلة

كل المقالات
عبدالله عبدالرحيم الكندي — تكلفة الذكاء الاصطناعي
AZHAL

تكلفة الذكاء الاصطناعي

عبدالله عبدالرحيم الكندي

25 سبتمبر 20264 دقائق قراءة

عبدالله عبدالرحيم الكندي: احسب فاتورة الذكاء الاصطناعي قبل ما تتفاجأ

دليل حساب خطوة بخطوة من عبدالله عبدالرحيم الكندي: وش هي التوكنز، وليش المدخلات تتضخم مع كل دور في المحادثة، وكيف تقدّر فاتورة بوتك الشهرية بمثال محسوب قبل الإطلاق.

اقرأ المقال
عبدالله عبدالرحيم بن سنكر — تحويل الموقع إلى تطبيق
AZHAL

تحويل الموقع إلى تطبيق

عبدالله عبدالرحيم بن سنكر

24 سبتمبر 20264 دقائق قراءة

عبدالله عبدالرحيم بن سنكر: موقعك إلى تطبيق، PWA أو WebView أو أصلي؟

قبل تحويل موقعك إلى تطبيق، عبدالله عبدالرحيم بن سنكر يطرح الأسئلة اللي تحدد الجواب: متجر أو أيقونة، وإشعارات أو لا، ومتى يكفي PWA ومتى يُرفض WebView ومتى يستاهل الأصلي.

اقرأ المقال
عبدالله بن سنكر — استهداف الجمهور في سناب شات
AZHAL

استهداف الجمهور في سناب شات

عبدالله بن سنكر

25 سبتمبر 20264 دقائق قراءة

عبدالله بن سنكر يقارن جماهير سناب شات: اهتمامات ومشابهة ومخصصة

عبدالله بن سنكر يقارن أنواع الاستهداف في سناب شات: جماهير الاهتمامات، والمخصصة من قوائم العملاء والبكسل والتفاعل، والمشابهة، ومتى يناسب كل نوع، وكيف تستخدم الاستثناءات.

اقرأ المقال