TypeScript में प्रकार से गुण कैसे हटाएँ: कोड को अनावश्यक बोझ से बचाएँ
\n\nक्या आपने कभी ऐसी स्थिति का सामना किया है जहाँ आपके पास एक बड़ा इंटरफ़ेस या प्रकार है, और आपको एक नया प्रकार बनाने की आवश्यकता है जो लगभग समान हो, लेकिन एक या दो फ़ील्ड के बिना? पूरे कोड की नकल करें? 15 पंक्तियाँ कॉपी करें और एक हटाएँ? इससे भी अधिक सुरुचिपूर्ण तरीका है। आज हम जानेंगे कि TypeScript में प्रकार से गुण कैसे हटाया जाए — यह सबसे लोकप्रिय उपयोगिताओं में से एक है जो दोहराव से बचाती है और कोड को स्वच्छ बनाती है।
\n\nयह विषय Stack Overflow पर एक वास्तविक हिट है। "Exclude property from type" प्रश्न हज़ारों बार देखा जाता है, क्योंकि देर-सबेर हर डेवलपर को प्रकार से फ़ील्ड हटाने या इंटरफ़ेस से गुण हटाने की आवश्यकता होती है। आइए सरल उदाहरणों से शुरू करके उन्नत तकनीकों तक क्रम से समझें।
\n\nसमस्या: प्रकार से फ़ील्ड्स क्यों हटाएँ?
\n\nकल्पना करें कि आपके पास एक इंटरफ़ेस User है:
interface User {\n id: number;\n name: string;\n email: string;\n password: string;\n createdAt: Date;\n}\n\nआप एक पंजीकरण फ़ॉर्म बनाना चाहते हैं जहाँ उपयोगकर्ता नाम, ईमेल और पासवर्ड दर्ज करता है। लेकिन id सर्वर पर उत्पन्न होता है, और createdAt स्वचालित रूप से। आपको एक प्रकार NewUser चाहिए जिसमें केवल name, email और password हो। यह कैसे करें?
खराब समाधान — शुरू से एक नया इंटरफ़ेस घोषित करना:
\n\ninterface NewUser {\n name: string;\n email: string;\n password: string;\n}\n\nयह काम करता है, लेकिन DRY (Don't Repeat Yourself) सिद्धांत का उल्लंघन करता है। यदि हम User में name का प्रकार बदलते हैं, तो NewUser में भी बदलना होगा। यहीं पर प्रकार से गुण हटाना काम आता है।
उपयोगिता प्रकार Omit: मुख्य उपकरण
\n\nTypeScript एक अंतर्निहित उपयोगिता प्रकार Omit<Type, Keys> प्रदान करता है। यह मूल प्रकार से निर्दिष्ट कुंजियों को हटाकर एक नया प्रकार बनाता है। सिंटैक्स सरल है:
type NewUser = Omit<User, 'id' | 'createdAt'>;\n\nअब NewUser में केवल name, email और password है। यदि हम User में email को Email में बदलते हैं, तो NewUser स्वचालित रूप से इसे अपना लेगा।
आइए व्यवहार में जाँच करें:
\n\nconst newUser: NewUser = {\n name: 'अन्ना',\n email: 'anna@example.com',\n password: 'secure123'\n}; // ✅ सब ठीक\n\nconst invalidUser: NewUser = {\n name: 'अन्ना',\n email: 'anna@example.com',\n password: 'secure123',\n id: 1 // ❌ त्रुटि: id प्रकार NewUser में मौजूद नहीं है\n};\n\nध्यान दें: Omit इंटरफ़ेस और प्रकार दोनों के साथ काम करता है। यह प्रकार से फ़ील्ड हटाने के लिए एक सार्वभौमिक उपकरण है।
Omit अंदर से कैसे काम करता है?
\n\nयह बेहतर ढंग से समझने के लिए कि TypeScript प्रकार से गुण कैसे हटाता है, आइए अंदर देखें। Omit दो अन्य उपयोगिताओं का संयोजन है: Pick और Exclude।
यहाँ बताया गया है कि इसे TypeScript की मानक लाइब्रेरी में कैसे परिभाषित किया गया है:
\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\n\nआइए चरण दर चरण समझें:
\n- \n
keyof T— प्रकार T की सभी कुंजियाँ प्राप्त करता है (उदाहरण:'id' | 'name' | 'email' | 'password' | 'createdAt') \n Exclude<keyof T, K>— इन कुंजियों से उन्हें हटाता है जो K में निर्दिष्ट हैं (हमें'name' | 'email' | 'password'मिलता है) \n Pick<T, ...>— T से केवल शेष कुंजियाँ चुनता है \n
इस प्रकार, इंटरफ़ेस से गुण हटाना कुंजियों को फ़िल्टर करने तक सीमित हो जाता है। सुरुचिपूर्ण, है ना?
\n\nPick: Omit का दूसरा पहलू
\n\nकभी-कभी हटाने के बजाय चुनना आसान होता है, इसके विपरीत