يخبر تأكيد النوع المترجم بـ "ثق بي، هذه القيمة من النوع X" باستخدام as. إنه لا يجري أي تحويل أو فحص في وقت التشغيل — يغير فقط كيف يتعامل المترجم مع القيمة.
ts
el = .() ;
el. = ;
data = .(str) ;
يخبر تأكيد النوع المترجم بـ "ثق بي، هذه القيمة من النوع X" باستخدام as. إنه لا يجري أي تحويل أو فحص في وقت التشغيل — يغير فقط كيف يتعامل المترجم مع القيمة.
el = .() ;
el. = ;
data = .(str) ;
يتجاوز التأكيد حكم المترجم — إذا كنت مخطئاً، ستحصل على توقف في وقت التشغيل بدون تحذير:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
التأكيد لا يجعل القيمة من هذا النوع؛ إنه يسكت الفاحص فقط. لقد نقلت المسؤولية عن الصحة من المترجم إلى نفسك.
// 1. type guard — actually verify at runtime
if (typeof input === "string") { /* input is string, proven */ }
// 2. validation library (zod) for external data
const user = UserSchema.parse(data); // throws if shape is wrong
as const مختلفconst point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
التأكيدات ضرورية أحياناً (DOM APIs، تضييق unknown الذي تحققت منه بالفعل)، لكن كل واحد منها هو مكان لا يستطيع المترجم حمايتك فيه.
فضل type guards أو schema validation للبيانات غير الموثوقة، وتعامل مع كل as كـ "أنا أعرف أفضل" صغير وعمدي يجب أن تكون متأكداً منه.