एक इंडेक्स सिग्नेचर गुणों के प्रकार का वर्णन करता है जब आप उनके नाम पहले से नहीं जानते हैं — शब्दकोश/मानचित्र को मॉडल करते हुए जहां कुंजियाँ गतिशील होती हैं।
{
[: ]: ;
}
: = { : , : };
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> को प्राथमिकता दें — और जब कुंजियां वास्तव में खुली हों और आप वास्तविक पुनरावृत्ति/आकार सिमेंटिक्स चाहते हों तो Map को प्राथमिकता दें।