النوع 'unknown'
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 8 من 73.
مثل any، يمكن لمتغير من النوع unknown أن يحمل أي قيمة:
let userInput: unknown = "Hello";
userInput = 42; // لا يوجد خطأ
userInput = true; // لا يوجد خطأالفرق الجوهري هو أن TypeScript لن تسمح لك بإجراء عمليات على قيمة من نوع unknown دون التحقق أولاً من نوعها الفعلي. هذا يمنع العديد من أخطاء وقت التشغيل (runtime errors):
let data: unknown = "TypeScript";
// data.toUpperCase(); // خطأ! TypeScript لا تعرف أنها سلسلة نصية (string)
// يجب عليك التحقق من النوع أولاً
if (typeof data === "string") {
console.log(data.toUpperCase()); // الآن أصبح الأمر آمناً!
}هذا يجعل unknown أكثر أماناً بكثير من any لأنه يجبرك على التحقق من النوع قبل استخدام الأساليب (methods) أو الخصائص (properties) الخاصة بالنوع.
التحدي
سهلقم بإنشاء متغير باسم userInput بنوع unknown وقم بتعيين السلسلة النصية "TypeScript" له.
ثم اكتب حارس نوع (type guard) باستخدام typeof للتحقق مما إذا كان userInput عبارة عن سلسلة نصية. إذا كان سلسلة نصية، فقم بطباعة نسخة الأحرف الكبيرة من السلسلة النصية إلى وحدة التحكم (console). إذا لم يكن سلسلة نصية، فقم بطباعة "Not a string" إلى وحدة التحكم (console).
يوضح هذا كيف يتطلب النوع unknown فحص النوع قبل أن تتمكن من استخدام الطرق الخاصة بالنوع بأمان مثل toUpperCase().
جرّب بنفسك
// إنشاء متغير userInput بنوع غير معروف (unknown)
let userInput: unknown = "TypeScript";
// مهام: اكتب الكود الخاص بك هنا
// استخدم typeof للتحقق مما إذا كان userInput عبارة عن سلسلة نصية (string)
// إذا كانت سلسلة نصية، قم بطباعة النسخة المكتوبة بأحرف كبيرة
// إذا لم تكن سلسلة نصية، قم بطباعة "Not a string"يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى TypeScript
1البداية مع TS
ما هي TypeScript؟لماذا نستخدم TypeScript؟أول كود TypeScript لكعملية الـ Compilation والأخطاءملخص: مقدمة في TS4التعامل مع الدوال
تحديد أنواع المعاملات وقيم الإرجاعتحديد أنواع Arrow Functionsنوع الإرجاع 'void'المعاملات الاختيارية باستخدام '?'القيم الافتراضية للمعاملاتتحديد أنواع Rest Parametersتعريف أنواع الدوالملخص: بناء دوال محددة الأنواع2الأنواع الأساسية
الأنواع الأساسية: str, num, booleanالنوع 'any': مخرج الهروبالنوع 'unknown'التعامل مع 'null' و 'undef'استنتاج الأنواع في التطبيق العمليتوضيحات الأنواع الصريحةمراجعة: تدريب على الأنواع الأساسية5الأنواع: الأسماء المستعارة، الاتحادات والتقاطعات
الأسماء المستعارة للأنواع الأساسية (Primitives)أنواع الاتحاد ('|')التعامل مع أنواع الاتحادالأنواع الحرفية (Literal Types)أنواع التقاطع ('&')دمج الأسماء المستعارة للأنواعملخص: تركيبات الأنواع المتقدمة3هياكل البيانات: المصفوفات و Tuple
المصفوفات محددة النوع (Typed Arrays)معدل 'readonly' للمصفوفاتما هو الـ Tuple؟تعريف والوصول إلى الـ Tuplesتفكيك الـ Tuples (Destructuring)الـ Tuples للقراءة فقط (Readonly)المصفوفات محددة النوع متعددة الأبعاداستخدام Spread Operator مع المصفوفاتملخص: المصفوفات و Tuples6تحديد أنواع الكائنات والواجهات
توصيف أنواع الكائنات المضمنة (Inline)الأسماء المستعارة للأنواع (Type Aliases) للكائناتمقدمة عن الواجهات (Interfaces)الواجهات (Interfaces) مقابل الأسماء المستعارة للأنواع (Type Aliases)الخصائص الاختيارية وخصائص القراءة فقط (Readonly)توسيع الواجهات والأنواعإضافة الدوال (Methods) إلى الواجهاتملخص: تحديد هياكل الكائناتتدرّب بنفسك: Playground لـ TypeScript