TypeScript Academy · पाठ

इंडेक्स सिग्नेचर बनाम Record

इंडेक्स सिग्नेचर और Record यूटिलिटी प्रकार में से उचित विकल्प चुनें।

पाठ 4, कुल 4 में से13 चरण

इंडेक्स सिग्नेचर बनाम Record, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

मैप का प्रकार बताने के दो तरीके

TypeScript शब्दकोश का वर्णन करने के दो सामान्य तरीके देता है: इंडेक्स हस्ताक्षर, जैसे { [k: string]: V }, और अंतर्निहित उपयोगिता प्रकार Record<K, V>। दोनों में काफी समानता है, लेकिन उनका लिखित रूप अलग है।

Record उपयोगिता प्रकार

Record<K, V> ऐसा ऑब्जेक्ट प्रकार बनाता है जिसकी keys K और मान V होते हैं। key के रूप में string देने पर यह स्ट्रिंग इंडेक्स हस्ताक्षर के समतुल्य होता है।

type Scores = Record<string, number>
const game: Scores = { alice: 10, bob: 7 }
console.log(game.alice)

इंडेक्स हस्ताक्षर के समतुल्य

ये दोनों प्रकार एक ही संरचना का वर्णन करते हैं। मनमानी स्ट्रिंग keys के लिए Record<string, number> और { [key: string]: number } एक-दूसरे के स्थान पर उपयोग किए जा सकते हैं।

type A = Record<string, number>
type B = { [key: string]: number }
const a: A = { x: 1 }
const b: B = a // assignable both ways
console.log(b.x)

लिटरल key यूनियन के साथ Record

Record की वास्तविक शक्ति लिटरल keys के सीमित यूनियन के साथ दिखाई देती है। यह ऐसा ऑब्जेक्ट बनाता है जिसमें सूचीबद्ध हर कुंजी आवश्यक होती है — ऐसी बात जिसे इंडेक्स हस्ताक्षर व्यक्त नहीं कर सकता।

type Role = "admin" | "editor" | "viewer"
type Perms = Record<Role, boolean>
const p: Perms = { admin: true, editor: true, viewer: false }
console.log(p.admin)

missing keys पकड़ी जाती हैं

क्योंकि हर लिटरल कुंजी आवश्यक होती है, इसलिए किसी एक को भूलना संकलन त्रुटि बन जाता है। यह एक मजबूत गारंटी है जो इंडेक्स हस्ताक्षर नहीं दे सकते।

type Role = "admin" | "editor" | "viewer"
// const bad: Record<Role, boolean> = { admin: true, editor: true }
// Error: property viewer is missing

इंडेक्स हस्ताक्षर किसी भी key की अनुमति देता है

इसके विपरीत, इंडेक्स हस्ताक्षर का दायरा खुला होता है। आप ऐसी keys जोड़ सकते हैं जिनका कहीं उल्लेख नहीं हुआ है, और किसी भी key का मौजूद होना आवश्यक नहीं है।

type Open = { [key: string]: number }
const o: Open = {}      // no keys required
o.anything = 1          // any key allowed
console.log(o.anything)

सीमित key समूह: Record को प्राथमिकता दें

जब keys का समूह ज्ञात और सीमित हो, तो लिटरल यूनियन के साथ Record अधिक स्पष्ट और सुरक्षित होता है। यह ठीक-ठीक बताता है कि कौन-सी keys मौजूद हैं और पूर्णता लागू करता है।

type Direction = "north" | "south" | "east" | "west"
type Moves = Record<Direction, number>
const m: Moves = { north: 1, south: 0, east: 2, west: 0 }
console.log(m.east)

खुले key समूह: दोनों में से कोई भी चलेगा

जब keys असीमित हों और रनटाइम पर खोजी जाती हों, तब Record<string, V> और इंडेक्स हस्ताक्षर, दोनों काम करते हैं। कई टीमें संक्षिप्तता के लिए Record चुनती हैं, जबकि अन्य स्पष्टता के लिए हस्ताक्षर चुनती हैं।

type Cache1 = Record<string, string>
type Cache2 = { [url: string]: string }
const c: Cache1 = {}
c["/home"] = "<html>"
console.log(c["/home"])

Record केवल एक मैप्ड प्रकार है

पर्दे के पीछे Record<K, V> को मैप्ड प्रकार के रूप में परिभाषित किया गया है: { [P in K]: V }। यह जानने से स्पष्ट होता है कि लिटरल यूनियन आवश्यक keys क्यों बनाता है, जबकि string इंडेक्स हस्ताक्षर बनाता है।

// lib definition (simplified):
// type Record<K extends string | number | symbol, V> = { [P in K]: V }
type Flags = Record<"a" | "b", boolean>
const f: Flags = { a: true, b: false }
console.log(f.a)

नामित keys और सभी के लिए विकल्प

एक ही इंटरफ़ेस में इंडेक्स हस्ताक्षर को सभी अन्य keys के लिए खुले विकल्प के साथ निश्चित keys के साथ मिलाया जा सकता है — जब आपको दोनों की आवश्यकता हो, तब यह उपयोगी है। Record अकेले आवश्यक नामित keys को खुले विकल्प के साथ इतनी साफ़ तरह से नहीं मिला सकता।

interface Response {
  status: number
  [header: string]: number | string
}
const r: Response = { status: 200, "x-id": "abc" }
console.log(r.status)

व्यवहार में चुनाव करना

सामान्य नियम: सीमित, ज्ञात keys → पूर्णता जाँच के लिए Record<Union, V>। असीमित keys → दोनों में से कोई भी रूप। नामित keys और सभी के लिए एक विकल्प चाहिए → इंटरफ़ेस के भीतर इंडेक्स हस्ताक्षर।

type Status = "ok" | "error"
type Messages = Record<Status, string>
const msg: Messages = { ok: "done", error: "failed" }
console.log(msg.ok)

त्वरित जाँच

Record और इंडेक्स हस्ताक्षरों के बारे में अपनी समझ का परीक्षण करें।

पुनरावलोकन

Record<string, V> स्ट्रिंग इंडेक्स हस्ताक्षर के बराबर है, लेकिन लिटरल key यूनियन वाला Record हर सूचीबद्ध key को आवश्यक बनाता है और संकलन समय पर छूटी हुई keys पकड़ लेता है। सीमित ज्ञात keys के लिए Record<Union, V>, असीमित keys के लिए दोनों में से कोई भी रूप, और नामित keys के साथ सभी के लिए एक विकल्प चाहिए तो इंडेक्स हस्ताक्षर का उपयोग करें। पर्दे के पीछे Record मैप्ड प्रकार { [P in K]: V } है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
101
पाठ
352

अक्सर पूछे जाने वाले प्रश्न

क्या “इंडेक्स सिग्नेचर बनाम Record” पाठ निःशुल्क है?

हाँ—“इंडेक्स सिग्नेचर बनाम Record” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“इंडेक्स सिग्नेचर बनाम Record” में मैं क्या सीखूँगा?

इंडेक्स सिग्नेचर और Record यूटिलिटी प्रकार में से उचित विकल्प चुनें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“इंडेक्स सिग्नेचर बनाम Record” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. इंडेक्स सिग्नेचर परिभाषित करना
  2. स्ट्रिंग बनाम संख्या इंडेक्स सिग्नेचर
  3. ज्ञात और डायनेमिक कुंजियों को मिलाना
  4. इंडेक्स सिग्नेचर बनाम Record
← TypeScript Academy पर वापस जाएँ