ایک انڈیکس سگنیچر خصوصیات کی قسم کو بیان کرتا ہے جب آپ ان کے نام پہلے سے نہیں جانتے — لغت/نقشوں کو ماڈل کرتے ہیں جہاں کلیدیں متحرک ہوں۔
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
ایک انڈیکس سگنیچر خصوصیات کی قسم کو بیان کرتا ہے جب آپ ان کے نام پہلے سے نہیں جانتے — لغت/نقشوں کو ماڈل کرتے ہیں جہاں کلیدیں متحرک ہوں۔
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
سادہ انڈیکس سگنیچر کے ساتھ، کمپائلر یہ فرض کرتا ہے کہ ہر کلید موجود ہے، لہذا scores.typo کو number کے طور پر ٹائپ کیا جاتا ہے حتیٰ کہ یہ رن ٹائم پر دراصل undefined ہو۔ noUncheckedIndexedAccess کو فعال کرنا اس کو ٹھیک کرتا ہے:
// with noUncheckedIndexedAccess: true
scores.math; // number | undefined → forces you to handle the missing case
interface Config {
name: string; // known property
[key: string]: string | number; // plus arbitrary extra keys
}
تمام نام شدہ خصوصیات انڈیکس سگنیچر کی قدر کی قسم کو تفویض کرنے کے قابل ہونی چاہیں۔
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record قدرتی مختصر ہے اور محدود کلید یونین کو سپورٹ کرتا ہے، جو سادہ [key: string] نہیں کر سکتا۔
انڈیکس سگنیچرز حقیقی طور پر متحرک کلیدی اشیاء (تلاش کی میزیں، کیشز، پارس کردہ JSON نقشے) کو ماڈل کرتے ہیں۔
حفاظت کی انتباہ کو جانیں (noUncheckedIndexedAccess) اور خوبصورتی کے لیے Record<K, V> کو ترجیح دیں — اور جب کلیدیں حقیقی طور پر کھلی ہوں اور آپ اصل تکرار/سائز semantics چاہتے ہوں تو Map کو ترجیح دیں۔