مراجعة الكود في TypeScript: 7 أشياء أتحقق منها

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

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

ابدأ الدورة

مقدمة: لماذا "مجرد الترجمة" هو معيار سيء

\n

تخيل موقفًا: تفتح طلب سحب على GitHub، ترى علامة CI الخضراء وتسمع صوتًا داخليًا: "الأنواع متطابقة - إذن الكود صحيح". مألوف؟ إذا كان الأمر كذلك، فأنت تقع في فخ نسميه "الشعور الزائف بالأمان في TypeScript".

\n

TypeScript ليس حلاً سحريًا. فهو لا يكتشف الأخطاء المنطقية، ولا يتحقق من متطلبات العمل، وبالتأكيد لا يضمن أن كودك لن ينهار في وقت التشغيل. لهذا السبب، مراجعة الكود في TypeScript ليست مجرد "إلقاء نظرة سريعة"، بل هي منهج منظم. في هذه المقالة، سأخبرك بما يجب أن تنظر إليه حقًا عند مراجعة كود TypeScript. أدوّن على PythonLib، وهنا اعتدنا على التعمق - استعد.

\n\n

1. النوع any: العلم الأحمر

\n

الأكثر وضوحًا، لكنه للأسف الأكثر شيوعًا. any هو مفتاح إيقاف TypeScript. إذا رأيت any في الكود، مهمتك هي فهم: هل هو كسل من المؤلف أم حالة مبررة حقًا؟

\n

مثال سيء:

\n
function processData(data: any) {\n    return data.name.toLowerCase();\n}
\n

هنا نفقد كل المعلومات عن النوع. إذا وصل data بقيمة null أو undefined - مرحبًا بك في خطأ وقت التشغيل.

\n

مثال جيد:

\n
interface UserData {\n    name: string;\n    age?: number;\n}\n\nfunction processData(data: UserData) {\n    return data.name.toLowerCase();\n}
\n

ما يجب التحقق منه في مراجعة الكود: إذا كان any لا يزال مستخدمًا (على سبيل المثال، للعمل مع JSON بهيكل غير معروف)، هل يطلب المؤلف التحقق من الصحة عند الإدخال؟ غالبًا ما يخفي any عدم وجود كتابة صحيحة للبيانات الخارجية.

\n\n

2. الوضع الصارم: لا تقم بتعطيله

\n

أول شيء أتحقق منه في tsconfig.json هو العلامة strict: true. إذا لم تكن موجودة، فأنت تحرم نفسك من طبقة كاملة من الفحوصات: strictNullChecks، noImplicitAny، strictFunctionTypes وغيرها.

\n

بدون strictNullChecks يمكنك كتابة:

\n
const user = getUser(); // قد يعيد null\nconst name = user.name; // TS لن يشتكي، لكنه سينهار في وقت التشغيل
\n

في مراجعة الكود: إذا رأيت أن المشروع يعمل بدون الوضع الصارم - اقرع ناقوس الخطر. هذا دين تقني يتراكم بشكل هائل. من الأفضل قضاء يوم في تفعيل الوضع الصارم وإصلاح الأخطاء بدلاً من قضاء شهر في مطاردة الأخطاء في الإنتاج.

\n\n

3. الأدوية العامة: القوة والمسؤولية

\n

الأدوية العامة هي القوة الخارقة لـ TypeScript. لكن مع القوة العظيمة تأتي مسؤولية كبيرة. في مراجعة الكود، أنظر دائمًا: هل بالغ المؤلف في تعقيد الأنواع؟

\n

مثال على التعقيد المفرط:

\n
function identity<T extends Record<string, unknown>>(arg: T): T {\n    return arg;\n}
\n

لماذا تقييد T بـ Record<string, unknown> إذا كنا ببساطة نعيد نفس الشيء؟ يكفي:

\n
function identity<T>(arg: T): T {\n    return arg;\n}
\n

ما يجب التحقق منه:

\n
    \n
  • هل تُستخدم الأدوية العامة حيث تكون المرونة مطلوبة، أم يمكن الاكتفاء بنوع محدد؟
  • \n
  • هل هناك قيود زائدة (extends) تعيق إعادة الاستخدام؟
  • \n
  • هل تم استنتاج الأنواع بشكل صحيح - ألا يضطر المستخدم إلى تحديد <SomeType> يدويًا حيث كان بإمكان TS تخمينها بنفسه؟
  • \n
\n\n

4. unknown vs any: اختر السلاح الصحيح

\n

عند العمل مع بيانات نوعها غير معروف لك (API، localStorage، إدخال المستخدم)، استخدم unknown بدلاً من any. unknown يجبرك على التحقق صراحة من النوع قبل الاستخدام.

\n

سيء:

\n<

المدونات

توصيات الكتب