TypeScript / الأساسي / الدرس 2
القيم والاستنتاج وتدفق التحكم
استخدم الاستنتاج للتعبير الواضح دون معلمات زائدة وافهم قيم JavaScript والحدود صراحة.
في هذه الصفحة
أهداف الدرس
- تمييز الأنواع الأولية والحرفية وتوسيع النوع.
- شرح حدود number وفحوص المجال الصريحة.
- كتابة تفرعات وحلقات بسلوك حدود محدد.
الاستنتاج يتبع التعبيرات والسياق
تستنتج TypeScript الأنواع من المهيئات والسياق. تسمح let score = 3 عادة بإسنادات عددية، وقد تحتفظ const mode = "ready" بنوع حرفي أضيق لعدم إعادة الإسناد. لا تجمد const الكائن أو المصفوفة تكراريًا؛ فقد تتغير خصائصهما. استخدم المعلمات لتوضيح الحدود أو منع توسيع غير مقصود بدل تكرار كل نوع واضح. لا يغير الاستنتاج تخصيص JavaScript أو مقارنتها.
number ليست ضمان مجال صحيح
يشمل number الكسور وNaN واللانهاية، ولا يعني عددًا صحيحًا غير سالب أو مالًا دقيقًا. تستخدم JavaScript حسابًا عائمًا فتحتاج الأعداد الضخمة والكسور تمثيلًا وتقريبًا مقصودين. تفرض Number.isSafeInteger والحدود مجال عدّ تنفيذيًا. يمثل bigint الأعداد الصحيحة بعمليات وتسلسل مختلفين ولا يمزج اعتباطيًا مع number. يفحص المثال الصلاحية قبل القبول؛ فلا تفرض المعلمة وحدها كل قاعدة عددية.
export {};
function validCount(value: number): boolean {
return Number.isSafeInteger(value) && value >= 0 && value <= 100;
}
console.log(validCount(12), validCount(2.5), validCount(Infinity));
true false false
تستوفي اثنا عشر القواعد، والكسر واللانهاية من number لكنهما خارج مجال العد.
تحديد كل حد بوعي
تختار if والتعبيرات الشرطية السلوك من شروط فعلية. تتوافر صدقية JavaScript وتوضح المقارنات الصريحة المتطلبات غالبًا. يخلط if count الصفر بالغياب ويخلط if text النص الفارغ بالمفقود. ميّز null وundefined من الفراغ الصحيح. استخدم المساواة الصارمة دون تحويل مقصود. يضيّق الفاحص بعد الشرط ولا يصلح حدًا منطقيًا خاطئًا. اختبر المساواة وجيرانها.
تحتاج الحلقة تقدمًا وتفسير حالة
تحتاج الحلقة تهيئة وشرط استمرار وخطوة تبلغ الخروج للمدخلات المقبولة. يجمع المثال واحدًا إلى أربعة. قبل كل تكرار تساوي total مجموع الموجبات الأصغر من next، وتحفظ الإضافة ذلك. عند خمسة يفشل الشرط ويصبح المجموع عشرة. تفسر الخاصية النتيجة دون تشغيل. تحتاج حدود المستخدم قيود موارد وفحصًا عدديًا؛ فلا تمنع number وحدها حسابًا هائلًا أو لا ينتهي.
export {};
let total = 0;
for (let next = 1; next <= 4; next += 1) { total += next; }
const state = total >= 10 ? "ready" : "wait";
console.log(total, state);
10 ready
تعطي أربع إضافات عشرة وتختار المساواة ready، ويغير استبدال <= بـ< العناصر المزارة.
استخدام التمثيل الذي تحتاجه المهمة
تقيس string.length وحدات UTF-16 لا الحروف المرئية عامة. تتكرر Array.from على نقاط Unicode وتحتاج الوحدات المركبة سياسة نص أخرى. تمثل boolean قيمتين ولا ترمز وحدها قرار صلاحيات. تجنب نوع الغلاف String عندما تقصد string. يفحص المترجم الإسناد ضمن نموذجه وتبقى الوحدات والطول والتقريب والحدود متطلبات واختبارات. توضّح الأسماء والدوال الخالصة الصغيرة الالتزامات.
الأخطاء الشائعة وإصلاحها
معاملة الصفر كبيانات مفقودة.
- لماذا يحدث؟
- استُخدم شرط صدقية بدل فحص الغياب.
- كيف تصلحه؟
- قارن null أو undefined صراحة حسب العقد.
- كيف تتجنب تكراره؟
- اختبر الفراغ والصفر الصحيحين.
عدّ يقبل كسورًا أو لانهاية.
- لماذا يحدث؟
- افتُرض أن number عدد صحيح محصور.
- كيف تصلحه؟
- أضف فحص الصحيح الآمن والمجال.
- كيف تتجنب تكراره؟
- اكتب قواعد المجال بجوار الواجهة.
كائن const يتغير.
- لماذا يحدث؟
- خُلط ثبات الارتباط بتجميد عميق.
- كيف تصلحه؟
- صمّم وصولًا readonly أو تجميدًا تنفيذيًا مقصودًا.
- كيف تتجنب تكراره؟
- افصل سياسة التشارك والتعديل عن صياغة const.
اختبر فهمك
1. توقع المثال مع next < 4 بدل next <= 4 واشرح الناتج بالخاصية الثابتة.
اعرض الحل المشروح
تزور الحلقة واحدًا واثنين وثلاثة وتطبع 6 wait. تبقى الخاصية صحيحة ويكون total مجموع المزور. تغير المجال لا الجمع؛ لذا اختبر العنصر الأخير المقصود والحد الدقيق لا انتهاء الحلقة فقط.
2. صمّم قبول حجم صفحة صحيح من واحد إلى خمسين وصنّف 0 و1 و2.5 و50 و51.
اعرض الحل المشروح
اشترط Number.isSafeInteger(value) وvalue >= 1 وvalue <= 50. يقبل واحد وخمسون فقط من القائمة؛ يخالف الصفر وواحد وخمسون الحدود ويخالف الكسر الصحيحية. افحص خارجيًا أثناء التنفيذ؛ فلا تختبر number الشروط أو تحول الإدخال المشوه.
أهم ما تعلمته
- يقلل الاستنتاج التكرار دون تغيير التنفيذ.
- تحتاج الأنواع الأولية فحص المجال.
- فسّر الحلقات واختبر مساواة الحدود صراحة.