ایک ٹائپ ایسرشن compiler کو بتاتی ہے "مجھ پر اعتماد کریں، یہ قدر X قسم کی ہے" as استعمال کرتے ہوئے۔ یہ کوئی بھی رن ٹائم کنورژن یا چیکنگ نہیں کرتا — یہ صرف تبدیل کرتا ہے کہ compiler قدر کو کیسے سلوک کرتا ہے۔
el = .() ;
el. = ;
data = .(str) ;
ایک ٹائپ ایسرشن compiler کو بتاتی ہے "مجھ پر اعتماد کریں، یہ قدر X قسم کی ہے" as استعمال کرتے ہوئے۔ یہ کوئی بھی رن ٹائم کنورژن یا چیکنگ نہیں کرتا — یہ صرف تبدیل کرتا ہے کہ compiler قدر کو کیسے سلوک کرتا ہے۔
el = .() ;
el. = ;
data = .(str) ;
ایک assertion compiler کے فیصلے کو نظر انداز کر دیتا ہے — اگر آپ غلط ہیں، تو آپ کو کوئی انتباہ کے بغیر رن ٹائم کریش ملتا ہے:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
Assertion قدر کو وہ قسم نہیں بناتا؛ یہ صرف checker کو خاموش کر دیتا ہے۔ آپ نے درستگی کی ذمہ داری compiler سے سے لے لی ہے۔
// 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
Assertions بعض اوقات ضروری ہیں (DOM APIs، پہلے سے چیک شدہ unknown کو محدود کرنا)، لیکن ہر ایک وہ جگہ ہے جہاں compiler آپ کو محفوظ نہیں رکھ سکتا۔
ناقابل اعتماد ڈیٹا کے لیے ٹائپ گارڈز یا اسکیمہ تصدیق کو ترجیح دیں، اور ہر as کو ایک چھوٹا، منصوبہ بند "میں بہتر جانتا ہوں" سمجھیں جس کے بارے میں آپ کو یقینی ہونا چاہیے۔