یہ خصوصیت ترمیم کار یہ کنٹرول کرتے ہیں کہ ایک خصوصیت ضروری ہے یا نہیں اور اس کو دوبارہ تفویض کیا جا سکتا ہے۔
اختیاری (?)
ts
{
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
یہ خصوصیت ترمیم کار یہ کنٹرول کرتے ہیں کہ ایک خصوصیت ضروری ہے یا نہیں اور اس کو دوبارہ تفویض کیا جا سکتا ہے۔
?) {
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
ایک اختیاری خصوصیت میں T | undefined قسم ہے، اس لیے کمپائلر آپ کو غائب صورتحال کو سنبھالنے پر مجبور کرتا ہے — "cannot read property of undefined" کی خرابیوں سے بچاتا ہے۔
interface Point { readonly x: number; readonly y: number; }
const p: Point = { x: 1, y: 2 };
p.x = 5; // ❌ Error: cannot assign to readonly property
// arrays too
const nums: readonly number[] = [1, 2, 3];
nums.push(4); // ❌ push doesn't exist on readonly array
readonly صرف تجمع کے وقت ہے (کوئی رن ٹائم نفاذ نہیں)، لیکن یہ قسم کے نظام میں تبدیلی پذیری کو دستاویز کرتا ہے اور نافذ کرتا ہے، غیر ارادی تبدیلیوں کو پکڑتا ہے۔
interface Config { readonly id: string; tags?: readonly string[]; }
type Frozen = Readonly<User>; // utility type makes ALL props readonly
? حقیقی طور پر اختیاری ڈیٹا کو ماڈل کرتا ہے اور null-سلامتی کو نافذ کرتا ہے؛ readonly تبدیلی پذیری کو ظاہر کرتا ہے اور نافذ کرتا ہے (تشکیل، props، اور غیر ارادی حالت تبدیلی سے بچنے کے لیے بہترین)۔
دونوں صحیح ہونے کی جانچ کو کمپائلر میں ڈالتے ہیں۔