unknown النوع unknown
آخر تحديث: 2026-10-22
unknown النوع unknown
النوع unknown هو "any الآمن": يمكن إسناد أي قيمة إليه، لكن يجب تضييقه أو التأكيد عليه قبل الاستخدام وإلا رفض المترجم ذلك. وهو النوع المفضل لاستقبال المدخلات الخارجية (استجابات الـ API ونتائج JSON.parse).
| المجموعة | الأنواع الأساسية |
|---|---|
| النوع | نوع |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
let value: unknown = JSON.parse(text);
if (typeof value === "string") {
value.trim(); // لا يمكن استدعاء الطرق إلا بعد التضييق
}
⚙️ المعاملات
| typeof x === "string" | فحوص مثل typeof x === "string" تضيّق unknown إلى نوع محدد |
|---|
القيمة المُعادة:لا قيمة مُعادة — unknown تعليق نوع ولا يُنتج أي كود في وقت التشغيل.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
hi
2.5
unsupported
(مخرجات التشغيل بعد التحويل؛ استدعاء value.trim() دون تضييق يؤدي إلى خطأ ترجمة — وهذه هي الحماية التي يوفرها unknown)
💡 نقاط مهمة
ℹ️ معلومة اتجاه الإسناد هو الفارق الجوهري بينهما: لا يمكن إسناد unknown إلا إلى unknown/any، بينما يمكن إسناد any إلى أي نوع؛ لذلك لا ينشر unknown عدم الأمان.
💡 تلميح أشهر أدوات التضييق: typeof (للقيم الأصلية)، و instanceof (لنسخ الفئات)، و in (لوجود الخاصية)، و Array.isArray (للمصفوفات).
⚠️ تنبيه التضييق يثبت صحة "فرضية النوع" فقط دون التحقق من محتوى البيانات؛ وللتحقق من بنية JSON الخارجي استخدم مكتبة مخططات (schema) مثل zod.
🏷️ الأنواع الأساسية ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س أيهما أختار: unknown أم any؟
ج الافتراضي هو unknown: فهو يجبرك على تأكيد النوع قبل الاستخدام، فتنكشف الأخطاء في زمن الترجمة. أما any فأداة مؤقتة للنماذج الأولية السريعة أو ترحيل الشيفرة القديمة.
س كيف أحوّل unknown إلى نوع محدد؟
ج على طريقين: التضييق (typeof/instanceof/in، ويتتبعه المترجم تلقائيًا)، أو تأكيد النوع value as T (أنت تضمن صحته للمترجم). فضّل التضييق ولا تكثر من التأكيد.
س ما نوع القيمة المُعادة من JSON.parse؟
ج توقيعها في المكتبة القياسية هو any. الأسلم تغليفها: function safeParse(text: string): unknown { return JSON.parse(text); } ثم التحقق بمخطط (schema).