as تأكيدات الأنواع (ومنها التأكيد المزدوج)

آخر تحديث: 2026-10-22

as تأكيدات الأنواع (ومنها التأكيد المزدوج)

تأكيد النوع (as) هو قولك للمترجم «أنا أعرف نوع هذه القيمة أفضل منك — عاملها بوصفها T». فهو لا يغيّر قيمة وقت التشغيل ولا يجري أي تحويل، بل يتجاوز استنتاج المترجم فحسب. استخدمه عندما تمتلك معلومات لا يستطيع المترجم الوصول إليها (استعلامات DOM، قيم unknown من مكتبات خارجية)، مع العلم أن التأكيد الخاطئ لن يُرفض.

المجموعةتضييق الأنواع والتأكيدات
النوععامل
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

const el = document.getElementById("root") as HTMLElement;

const data = JSON.parse(raw) as Config;   // شائع: طيّ unknown/any إلى نوع محدد

// عندما لا يتشارك النوعان شيئًا يلزم تأكيد مزدوج (رائحة تصميم)
const n = value as unknown as Config;

⚙️ المعاملات

as Tيؤكد التعبير بوصفه T. لا يسمح TS بالتأكيد إلا بين أنواع «متداخلة» (أحدهما قابل للإسناد إلى الآخر)، وإلا أبلغ عن خطأ
as unknown as Tالتأكيد المزدوج: التحويل إلى unknown أولًا ثم إلى T، متجاوزًا فحص التداخل. إنه في الغالب دليل على مشكلة في نمذجة الأنواع

القيمة المُعادة:التأكيد لا يولّد أي شيفرة وقت تشغيل — الناتج بعد الترجمة مطابق تمامًا للشيفرة دون as؛ إنه يغيّر فقط منظور الأنواع في وقت الترجمة.

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

20 dark
string

(مخرجات التشغيل بعد الترجمة. انتبه إلى السطر الثاني: بعد التأكيد بوصفه {w:number} تبقى قيمة التشغيل سلسلة "1920x1080" — فالتأكيد لا يحوّل القيم وtypeof legacy هو "string". التأكيد الخاطئ لا يتكشف إلا في وقت التشغيل)

💡 نقاط مهمة

⚠️ تنبيه التأكيد ليس تحويل نوع ولا يحدث شيء في وقت التشغيل. أكّد سلسلة بوصفها رقمًا واستدعِ toFixed: ستنجح الترجمة ثم يرمي خطأً في وقت التشغيل — كل أخطاء التأكيد مؤجلة إلى وقت التشغيل.
ℹ️ معلومة أضاف TS 4.9 معامل satisfies الذي يتحقق من النوع مع الحفاظ على استنتاج الحرفيات — فكثير من الحالات التي كانت تتطلب as يمكن اليوم استبدالها بـ satisfies الأكثر أمانًا.
💡 تلميح ترتيب الأفضلية: تضييق الحراسات > unknown مع تضييق > تأكيد as > as unknown as. اترك التأكيدات للحالات التي تعرف فيها فعلًا أكثر من المترجم، وارتاب تصميمك كلما ظهر تأكيد مزدوج.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س لماذا لا يمكن التأكيد مباشرة بين نوعين «لا علاقة بينهما»؟
ج يشترط TS في التأكيد قيام إحدى جهتي الإسناد (وجود تداخل) لمنع أخطاء بديهية مثل تأكيد string بوصفه number. وعندما تحتاج ذلك فعلًا تلجأ إلى as unknown as T — وهذا الطقس مقصود ليوقفك لتفكر: هل يجب فعلًا أن تفعل هذا؟
س ما الفرق بين as وتعليق النوع (: T)؟
ج التعليق قيد وفحص: يجب أن تفي القيمة بـ T فعلًا وإلا ظهر خطأ؛ أما as فتجاوز للفحص بالإعلان المباشر. فضّل التعليقات متى أمكن — فهي تحفظ حماية المترجم، بينما as توقيع شخصي منك على المخاطرة.
س أيّهما المفضل في ملفات JSX: <T>expr أم as؟
ج في ملفات .tsx يتعارض التأكيد بالأقواس الزاويّة <T>expr مع صياغة JSX فلا يمكن استخدامه — استخدم expr as T على نحو موحّد. الصيغتان متكافئتان دلاليًا تمامًا.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%