تأكيدات النوع
جزء من قسم Introduction To TypeScript في رحلة JavaScript على Coddy — الدرس 68 من 73.
أحياناً لا تملك TypeScript معلومات كافية لتحديد النوع الدقيق لقيمة ما، ولكنك كمطور تعرف أكثر عن ماهية هذه القيمة في الواقع. تسمح لك تأكيدات النوع (Type assertions) بإخبار TypeScript "ثق بي، أنا أعرف أن هذه القيمة من هذا النوع المحدد".
توفر TypeScript طريقتين لكتابة تأكيدات النوع (type assertions). تعتبر صيغة as هي النهج الأكثر شيوعاً:
let data: unknown = '{"name": "John", "age": 30}';
let user = data as string;يمكنك أيضاً استخدام صيغة الأقواس الزاوية (angle-bracket)، على الرغم من أنها أقل شيوعاً في TypeScript الحديثة:
let data: unknown = '{"name": "John", "age": 30}';
let user = <string>data;يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم بإنشاء دالة تعالج البيانات من محاكاة لـ API خارجي. ستعمل مع قيم من النوع unknown وتستخدم تأكيدات النوع (type assertions) للوصول إلى خصائصها بأمان.
قم بإنشاء متغير apiResponse من النوع unknown وقم بتعيين سلسلة JSON التالية له:
{"userId": 42, "username": "alice_dev", "isActive": true}قم بإنشاء دالة باسم processUserData تقوم بما يلي:
- تأخذ معاملًا
dataمن النوعunknown - تستخدم تأكيد النوع لمعاملة
dataكـstring - تقوم بتحليل سلسلة JSON باستخدام
JSON.parse() - تستخدم تأكيد نوع آخر لمعاملة النتيجة المحللة ككائن يحتوي على الخصائص
userId(رقم)، وusername(سلسلة نصية)، وisActive(قيمة منطقية) - تعيد سلسلة نصية منسقة:
"User [userId]: [username] (Active: [isActive])" - تملك نوع إرجاع صريح هو
string
قم بإنشاء بيانات اختبار إضافية:
- قم بإنشاء
secondApiResponseمن النوعunknownمع سلسلة JSON:{"userId": 15, "username": "bob_admin", "isActive": false} - قم بإنشاء
thirdApiResponseمن النوعunknownمع سلسلة JSON:{"userId": 99, "username": "charlie_user", "isActive": true}
اختبر دالتك واطبع المخرجات التالية:
- استدعِ
processUserDataمعapiResponseواطبع النتيجة - استدعِ
processUserDataمعsecondApiResponseواطبع النتيجة - استدعِ
processUserDataمعthirdApiResponseواطبع النتيجة
ورقة مرجعية
تسمح لك توكيدات النوع (Type assertions) بإخبار TypeScript بالنوع المحدد للقيمة عندما تعرف أكثر مما يمكن لـ TypeScript استنتاجه.
استخدم صيغة as (الأكثر شيوعاً):
let data: unknown = '{"name": "John", "age": 30}';
let user = data as string;صيغة الأقواس الزاوية البديلة:
let data: unknown = '{"name": "John", "age": 30}';
let user = <string>data;جرّب بنفسك
// إنشاء متغيرات استجابة واجهة برمجة التطبيقات (API)
const apiResponse: unknown = '{"userId": 42, "username": "alice_dev", "isActive": true}';
const secondApiResponse: unknown = '{"userId": 15, "username": "bob_admin", "isActive": false}';
const thirdApiResponse: unknown = '{"userId": 99, "username": "charlie_user", "isActive": true}';
// TODO: قم بإنشاء دالة processUserData هنا
// اختبار الدالة وطباعة النتائج
console.log(processUserData(apiResponse));
console.log(processUserData(secondApiResponse));
console.log(processUserData(thirdApiResponse));يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Introduction To 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) إلى الواجهاتملخص: تحديد هياكل الكائنات