TypeScript 2025 में ऑब्जेक्ट टाइपिंग: संपूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Stack Overflow पर object literal का टॉपिक आज भी क्यों ट्रेंड करता है?

\n\n

अगर आपने कभी TypeScript में कोड लिखा है, तो आपने शायद यह महसूस किया होगा: आप एक ऑब्जेक्ट बनाते हैं, उसका टाइप बताते हैं, और कंपाइलर या तो एरर देता है या, उससे भी बुरा, कोई एरर नहीं देता, लेकिन रनटाइम पर सब कुछ फेल हो जाता है। है ना?

\n\n

TypeScript में object literal के लिए type definition — Stack Overflow पर सबसे ज्यादा देखे जाने वाले टॉपिक्स में से एक है, जिसके हज़ारों व्यूज़ हैं। और यह कोई संयोग नहीं है। यह जितना सरल दिखता है, उतना ही इसमें गहराई है: interface और type में अंतर, excess properties, optional fields, readonly modifiers, और नया satisfies ऑपरेटर।

\n\n

2025 में TypeScript बहुत आगे बढ़ चुका है। ऐसी नई फीचर्स आई हैं जो कोड को क्लीनर और सुरक्षित बनाती हैं। लेकिन कई डेवलपर्स अब भी पुराने तरीकों का उपयोग कर रहे हैं। आइए जानते हैं कि आज object literal को सही तरीके से कैसे टाइप किया जाए, ताकि कोड विश्वसनीय, पढ़ने में आसान और आधुनिक हो।

\n\n

1. Interface या Type: 2025 में object literal के लिए क्या चुनें?

\n\n

यह एक क्लासिक सवाल है जो गरमागरम बहस का कारण बनता है। आइए इसे स्पष्ट करते हैं।

\n\n

Interface का उपयोग कब करें

\n

Interface ऑब्जेक्ट के आकार (shape) को बताने का सबसे अच्छा तरीका है। यह टाइप इंफ़रेंस के साथ बेहतर काम करता है, एरर मैसेज ज्यादा स्पष्ट देता है, और declaration merging को सपोर्ट करता है।

\n\n
// ✅ सही: object literal के लिए interface\ninterface User {\n  name: string;\n  age: number;\n  email?: string; // ऑप्शनल फील्ड\n}\n\nconst user: User = {\n  name: "अन्ना",\n  age: 28,\n  email: "anna@example.com"\n};
\n\n

Type का उपयोग कब करें

\n

Type-एलियास union-टाइप, intersection-टाइप, tuples और जटिल कंडीशनल टाइप के लिए अपरिहार्य हैं। साधारण ऑब्जेक्ट के लिए भी ये काम करते हैं, लेकिन इनमें सीमाएँ हैं।

\n\n
// ✅ सही: union के लिए type\ntype Status = "active" | "inactive" | "pending";\n\n// ऑब्जेक्ट के लिए type भी ठीक है, लेकिन कम एक्सटेंसिबल\ntype UserType = {\n  name: string;\n  age: number;\n};
\n\n

2025 का प्रैक्टिकल सुझाव: पब्लिक API और ऑब्जेक्ट के आकार को बताने के लिए interface का उपयोग करें। जटिल कंपोज़िशन, कंडीशनल टाइप और union-टाइप के लिए type का उपयोग करें। यह कोई सख्त नियम नहीं, लेकिन एक अच्छी प्रैक्टिस है।

\n\n

2. Excess property checks: दुश्मन या दोस्त?

\n\n

शुरुआती लोगों की सबसे आम गलतियों में से एक है ऑब्जेक्ट लिटरल में एक अतिरिक्त प्रॉपर्टी डालना। TypeScript एरर देता है, और यह अच्छी बात है।

\n\n
interface Config {\n  url: string;\n  timeout?: number;\n}\n\n// ❌ एरर: अतिरिक्त प्रॉपर्टी 'retries'\nconst badConfig: Config = {\n  url: "https://api.example.com",\n  timeout: 5000,\n  retries: 3 // Error!\n};
\n\n

लेकिन एक खामी है: अगर आप ऑब्जेक्ट को एक वेरिएबल के ज़रिए असाइन करते हैं, तो चेकिंग कमजोर हो जाती है। सावधान रहें।

\n\n
const configData = {\n  url: "https://api.example.com",\n  timeout: 5000,\n  retries: 3\n};\n\n// ✅ कोई एरर नहीं (लेकिन यह अप्रत्याशित हो सकता है)\nconst config: Config = configData;
\n\n

2025 में, टाइप इंफ़रेंस को खोए बिना सख्त चेकिंग के लिए satisfies का उपयोग करें। इसके बारे में अगले सेक्शन में।

\n\n

3. satisfies ऑपरेटर: 2025 की सबसे बड़ी फीचर

\n\n

satisfies ऑपरेटर TypeScript 4.9 में आया और इसने एक बड़ा बदलाव ला दिया। यह जाँचता है कि एक एक्सप्रेशन का टाइप किसी दिए गए टाइप को पूरा करता है या नहीं, बिना उस टाइप को बदले जो TypeScript ने खुद इंफ़र किया है।

\n\n
// पुराना तरीका: सटीक टाइप खोना\nconst palette: Record<string, string | string[]> = {\n  red: [255, 0, 0],\n  green: "#00ff00",\n  blue: "#0000ff"\n};\n// palette.red — string | string[] (बुरा)\n\n// नया तरीका: satisfies के साथ\nconst palette = {\n  red: [255, 0, 0],\n  green: "#00ff00",\n  blue: "#0000ff"\n} satisfies Record<string, string | string[]>;\n\n// palette.red — number[] (सटीक टाइप बचा हुआ!)\n// palette.green — string\n// palette.blue — string

ब्लॉग

पुस्तक अनुशंसाएँ