محتويات الدورة

TypeScript / المتقدم / الدرس 17

ترحيل JavaScript ودمج أدوات البناء

اعتمد TypeScript تدريجيًا مع حفظ السلوك المعروف وأظهر الحدود غير المكتوبة وافصل التحويل من الفحص الدلالي.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تخطيط الترحيل حول حدود وحدات مختبرة.
  • استخدام allowJs وcheckJs والتصريحات بافتراضات صريحة.
  • فحص دلالة التنفيذ بعد تغيير الأدوات.

حفظ السلوك قبل زيادة الدقة

ابدأ بالمداخل والصيغ والاختبارات والإصدارات والأوامر. لا يكفي تغيير الامتداد وقد تخفي any عدم اليقين. اختر وحدة محدودة بمدخلات واضحة وسجّل سلوكها ثم أضف الأنواع. صنّف التشخيص عيبًا أو تصريحًا مفقودًا أو فرضًا ديناميكيًا أو سلوكًا مقصودًا. قد يجب تغيير السلوك بمتطلب واختبار، ولا يثبت توليد JavaScript وحده أمان الترحيل.

وضع عملية خالصة مختبرة خلف حد نوعي

تمثل الدالة قلبًا عدديًا صغيرًا مرحلًا. تمنع readonly تعديل العرض ويوثق الإرجاع النتيجة. يبقى الجمع JavaScript ويفترض مجالًا مفحوصًا. يحتاج المستدعي القديم النصي فحصًا أو تطبيعًا موثقًا. لا تغير التحويل الضمني عرضيًا كأنه معلمات فقط. سجّل الصحيح والفاسد القديم لتقرير ما يُحفظ وما يُرفض. ركز الاختبارات على السلوك الملحوظ.

typescript قلب محدد بنتاج محفوظ للمدخل الصغير
export {};
function total(values: readonly number[]): number {
  return values.reduce((sum, value) => sum + value, 0);
}
console.log(total([2, 4, 6]), total([]));
الناتج المتوقع
12 0

المجموع اثنا عشر وللفراغ صفر، ولا تجري المعلمة تحويلًا للمدخل.

استخدام المشاريع المختلطة بوعي

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

إظهار الحد القديم بصدق قبل الاستخدام

تقبل الدالة unknown من مستدعٍ غير مكتوب وتفحص متطلبها قبل الأسلوب النصي. يزيد ذلك على وضع string مع بقاء مستدعي JavaScript اعتباطي. سياسة الرمي مقصودة وقد يفضل اتحاد نتيجة للفشل المتوقع. لا تعتبر String(value) إصلاحًا محايدًا؛ فهي تقبل قيمًا وتستدعي تحويلًا خاصًا. اختر الرفض أو التطبيع أو الافتراضي واختبره وافصل قراري النوع والإدخال للمراجعة.

typescript عقد تنفيذي فعلي لحد غير مكتوب
export {};
function normalizeName(value: unknown): string {
  if (typeof value !== "string") { throw new Error("name must be text"); }
  return value.trim();
}
console.log(normalizeName(" Mira "));
try { normalizeName(7); } catch (error) {
  console.log(error instanceof Error ? error.message : "unexpected failure");
}
الناتج المتوقع
Mira
name must be text

يُشذب النص ويُرفض العدد بمنطق فعلي لا تأكيد نوعي.

فحص الفاحص والمحول مستقلين

قد تنزع أدوات وبيئات صياغة TypeScript بقيود إصدار دون فحص دلالي. احفظ خطوة tsc إذا ولد غيرها الشيفرة. ليست كل التراكيب ممحوة؛ فقد تحتاج enum وnamespace وخصائص المعامل تحويلًا. حدّد أوضاع الحقول والمزخرفات والوحدات والامتداد. يشغل المقرر ناتج المترجم ولا يفترض تنفيذ المصدر مباشرة. افحص خرائط المصدر والمداخل والبناء النظيف كي لا يخفي المخزن تكاملًا مكسورًا.

الأخطاء الشائعة وإصلاحها

ترحيل ينشر any بمعظم الواجهات.

لماذا يحدث؟
أُخفي التشخيص بدل تصنيف الحدود.
كيف تصلحه؟
استخدم unknown وعقودًا محددة عند غياب الدليل.
كيف تتجنب تكراره؟
تتبّع المخارج المؤقتة وقللها.

نجاح المحول مع بقاء أخطاء دلالية.

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

ترحيل يغير التحويل العددي صمتًا.

لماذا يحدث؟
جُمع النوع بتطبيع غير موثق.
كيف تصلحه؟
حدّد واختبر قبول الإدخال القديم.
كيف تتجنب تكراره؟
افصل تغيير السلوك من تغيير النوع فقط.

اختبر فهمك

1. يقبل جمع قديم ["2", "4"] بتحويل JavaScript. لماذا لا تكفي number[]؟

اعرض الحل المشروح

تقيد المعلمة المستدعي المفحوص ولا تغير المصفوفة غير المفحوصة. قرر رفض النص الرقمي أو تحليله بقاعدة موثقة وافحص الحد واختبر الإدخال نفسه. وضّح أثر تغيير السلوك لا كإصلاح بيانات تلقائي.

2. يستخدم مشروع محولًا سريعًا وisolatedModules. ما الدليل الإضافي قبل إعلان التحقق؟

اعرض الحل المشروح

شغّل الفحص الدلالي المقصود ثم اختبر المداخل في البيئة. تفرض isolatedModules قيود تحويل ملفي ولا تثبت كل العلاقات العابرة. افحص المسارات ومستهلكي التصريحات وحالات التنفيذ بدل نجاح التحويل وحده.

أهم ما تعلمته

  • رحّل الحدود باختبارات لا any شاملة.
  • أظهر تغيير سياسة البيانات.
  • يبقى التحويل والفحص الدلالي مرحلتين.

المراجع الرسمية