TypeScript में इंटरफ़ेस के आधार पर ऑब्जेक्ट कैसे बनाएं: कोड के साथ पूर्ण व्याख्या
\n\nक्या आप कभी ऐसी स्थिति में आए हैं जहाँ TypeScript सचमुच आप पर "चिल्ला" रहा हो क्योंकि आप एक ऐसा ऑब्जेक्ट बनाने की कोशिश कर रहे हैं जो इंटरफ़ेस से मेल नहीं खाता? परिचित लगता है? यदि आप कम से कम एक सप्ताह से TypeScript के साथ काम कर रहे हैं, तो आपने निश्चित रूप से यह त्रुटि देखी होगी:
\n\nType '{}' is missing the following properties from type 'User': name, age\n\nयह Stack Overflow पर सबसे लोकप्रिय समस्याओं में से एक है (दसियों हज़ार बार देखा गया), और आज हम इसे हमेशा के लिए समझ लेंगे। इस लेख में आप जानेंगे TypeScript में इंटरफ़ेस के आधार पर ऑब्जेक्ट कैसे बनाएं, कौन से तरीके हैं और कब किसका उपयोग करना है।
\n\nयह विषय इतना महत्वपूर्ण क्यों है?
\n\nTypeScript, JavaScript के ऊपर एक अतिरिक्त परत है जो स्थैतिक टाइपिंग जोड़ती है। TypeScript इंटरफ़ेस ऑब्जेक्ट की संरचना का वर्णन करने के लिए एक शक्तिशाली उपकरण है। लेकिन शुरुआती अक्सर भ्रमित हो जाते हैं: "मैंने इंटरफ़ेस घोषित कर दिया, लेकिन अब वास्तविक ऑब्जेक्ट कैसे बनाऊं?"
\n\nइस तंत्र की सही समझ के बिना, आप डिबगिंग में घंटों बर्बाद करेंगे या, इससे भी बदतर, any का उपयोग करेंगे — और यह TypeScript के सभी लाभों को खोने का सीधा रास्ता है।
विधि 1: प्रत्यक्ष असाइनमेंट (सबसे सरल)
\n\nTypeScript इंटरफ़ेस के अनुसार ऑब्जेक्ट बनाने का सबसे स्पष्ट तरीका — बस इंटरफ़ेस प्रकार वाले वेरिएबल को ऑब्जेक्ट लिटरल असाइन करना है:
\n\ninterface User {\n name: string;\n age: number;\n email?: string; // वैकल्पिक फ़ील्ड\n}\n\n// ✅ सही: ऑब्जेक्ट पूरी तरह से इंटरफ़ेस से मेल खाता है\nconst user: User = {\n name: "अन्ना",\n age: 28,\n email: "anna@example.com"\n};\n\n// ✅ यह भी सही: वैकल्पिक फ़ील्ड को छोड़ा जा सकता है\nconst userMinimal: User = {\n name: "इवान",\n age: 35\n};\n\nयह काम करता है, लेकिन एक बारीकी है: TypeScript जाँच करेगा कि ऑब्जेक्ट में सभी अनिवार्य फ़ील्ड मौजूद हैं। यदि आप name या age भूल जाते हैं, तो कंपाइलर त्रुटि देगा।
❌ शुरुआती लोगों की सामान्य गलती
\n\n// ❌ त्रुटि! अनिवार्य फ़ील्ड 'age' गायब है\nconst badUser: User = {\n name: "पीटर"\n};\n\nविधि 2: as ऑपरेटर का उपयोग (टाइप कास्टिंग)
\n\nकभी-कभी आपको धीरे-धीरे ऑब्जेक्ट बनाने की आवश्यकता होती है, उदाहरण के लिए, इसे विभिन्न स्रोतों से भरना। ऐसे मामलों में आप as ऑपरेटर का उपयोग कर सकते हैं:
interface Config {\n apiUrl: string;\n timeout: number;\n retries: number;\n}\n\n// टाइप कास्टिंग के साथ खाली ऑब्जेक्ट बनाएं\nconst config = {} as Config;\n\n// अब एक-एक करके फ़ील्ड जोड़ सकते हैं\nconfig.apiUrl = "https://api.example.com";\nconfig.timeout = 5000;\nconfig.retries = 3;\n\n// ✅ काम करता है, लेकिन सावधान रहें!\n\n⚠️ चेतावनी: यह विधि ऑब्जेक्ट निर्माण के चरण में टाइप जाँच को अक्षम कर देती है। आप गलती से कोई अनिवार्य फ़ील्ड छोड़ सकते हैं और इसके बारे में केवल रनटाइम पर पता चलेगा। as का उपयोग केवल तभी करें जब आप सुनिश्चित हों कि सभी फ़ील्ड भर दिए जाएंगे।
विधि 3: फ़ैक्टरी फ़ंक्शन (अनुशंसित)
\n\nTypeScript में इंटरफ़ेस के आधार पर ऑब्जेक्ट बनाने का सबसे अच्छा तरीका — फ़ैक्टरी फ़ंक्शन लिखना है। यह 100% टाइप सुरक्षा और डिफ़ॉल्ट मान सेट करने की क्षमता देता है:
\n\ninterface Product {\n id: number;\n title: string;\n price: number;\n inStock: boolean;\n description?: string;\n}\n\n// डिफ़ॉल्ट पैरामीटर के साथ फ़ैक्टरी फ़ंक्शन\nfunction createProduct(\n id: number,\n title: string,\n price: number,\n inStock: boolean = true,\n description?: string\n): Product {\n return {\n id,\n title,\n price,\n inStock,\n ...(description && { description })\n };\n}\n\n// उपयोग\nconst laptop = createProduct(1, "लैपटॉप", 999.99);\nconst phone = createProduct(2, "स्मार्टफ़ोन", 599.99, false, "बेहतरीन फ़ोन");\n\nconsole.log(laptop); // { id: 1, title: 'लैपटॉप', price: 999.99, inStock: true }\nconsole.log(phone)