الأنواع الحرفية (Literal Types)
جزء من قسم Introduction To TypeScript في رحلة JavaScript على Coddy — الدرس 33 من 73.
أنواع القيم الحرفية (Literal types) تسمح لك بتقييد متغير بقيم دقيقة ومحددة بدلاً من فئات واسعة. فبدلاً من قبول أي سلسلة نصية (string)، يمكنك قصرها على "left" أو "right" أو "up" أو "down" فقط.
يستخدم النوع الحرفي (literal type) القيمة الفعلية كنوع بحد ذاته.
يمكنك إنشاء أنواع حرفية (literal types) للسلاسل النصية، أو الأرقام، أو القيم المنطقية:
let direction: "left" = "left"; // يُسمح فقط بـ "left"
let count: 42 = 42; // يُسمح فقط بالرقم 42
let isReady: true = true; // يُسمح فقط بـ trueتصبح أنواع القيم الحرفية (Literal types) قوية عند دمجها مع أنواع الاتحاد (union types)، مما يؤدي إلى إنشاء مجموعة محكومة من القيم المسموح بها. هذا مثالي لسيناريوهات مثل الاتجاهات، أو أكواد الحالة، أو خيارات التكوين:
type Direction = "left" | "right" | "up" | "down";
type Status = "pending" | "approved" | "rejected";
let playerMove: Direction = "up"; // صالح
let orderStatus: Status = "pending"; // صالح
// let invalid: Direction = "diagonal"; // خطأ!يمنحك هذا النهج مرونة الخيارات المتعددة مع الحفاظ على سلامة الأنواع الصارمة. ستقوم TypeScript باكتشاف الأخطاء المطبعية والقيم غير الصالحة في وقت التجميع، مما يجعل كودك أكثر موثوقية من استخدام أنواع السلاسل النصية العامة.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم بإنشاء اسم مستعار للنوع (type alias) باسم Direction للأنواع الحرفية (literal types) "left" | "right" | "up" | "down".
قم بإنشاء اسم مستعار للنوع باسم GameState للأنواع الحرفية "menu" | "playing" | "paused" | "gameover".
قم بإنشاء اسم مستعار للنوع باسم Difficulty للأنواع الحرفية "easy" | "medium" | "hard".
الآن قم بالتصريح عن المتغيرات التالية باستخدام أسماء مستعارات الأنواع الخاصة بك:
- قم بالتصريح عن متغير باسم
playerDirectionمن النوعDirectionوقم بتعيين القيمة"up"له - قم بالتصريح عن متغير باسم
currentStateمن النوعGameStateوقم بتعيين القيمة"playing"له - قم بالتصريح عن متغير باسم
selectedDifficultyمن النوعDifficultyوقم بتعيين القيمة"medium"له
قم بإنشاء دالة باسم movePlayer تقبل معاملًا يسمى direction من النوع Direction وتعيد string. يجب أن تعيد الدالة رسالة بالتنسيق "Moving [direction]".
قم بإنشاء دالة أخرى باسم updateGameState تقبل معاملًا يسمى state من النوع GameState وتعيد string. يجب أن تعيد الدالة رسالة بالتنسيق "Game state: [state]".
قم باستدعاء دوالك باستخدام المتغيرات التي أنشأتها واطبع النتائج:
- قم باستدعاء
movePlayerمعplayerDirectionواطبع النتيجة - قم باستدعاء
updateGameStateمعcurrentStateواطبع النتيجة - اطبع قيمة
selectedDifficulty
اطبع كل نتيجة في سطر منفصل بالترتيب المحدد أعلاه.
ورقة مرجعية
تقيد أنواع القيم الحرفية (Literal types) المتغيرات بقيم محددة ودقيقة بدلاً من الفئات الواسعة:
let direction: "left" = "left"; // يُسمح فقط بـ "left"
let count: 42 = 42; // يُسمح فقط بالرقم 42
let isReady: true = true; // يُسمح فقط بـ trueادمج أنواع القيم الحرفية مع أنواع الاتحاد (union types) لإنشاء مجموعات محكومة من القيم المسموح بها:
type Direction = "left" | "right" | "up" | "down";
type Status = "pending" | "approved" | "rejected";
let playerMove: Direction = "up"; // صالح
let orderStatus: Status = "pending"; // صالحيوفر هذا أماناً للأنواع (type safety) من خلال اكتشاف الأخطاء المطبعية والقيم غير الصالحة في وقت التجميع (compile time) مع الحفاظ على المرونة مع خيارات متعددة.
جرّب بنفسك
// TODO: اكتب كودك هنا
// قم بإنشاء أسماء مستعارة للأنواع (type aliases) لكل من Direction و GameState و Difficulty
// قم بالتصريح عن المتغيرات باستخدام الأسماء المستعارة للأنواع الخاصة بك
// قم بإنشاء دالتي movePlayer و updateGameState
// قم باستدعاء الدوال وطباعة النتائجيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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) إلى الواجهاتملخص: تحديد هياكل الكائنات