Loading…
Loading…
पता लगाएं कि जब टाइपस्क्रिप्ट इंटरसेक्शन टाइप्स को साधारण ऑब्जेक्ट मर्जिंग माना जाता है, तो वे क्यों विफल हो जाते हैं। जोहान्सबर्ग की स्थानीय इंजीनियरिंग टीमें इन छुपे हुए बग्स को समय रहते पकड़ रही हैं।

जब जोहान्सबर्ग की एक प्रमुख फिनटेक में सीनियर आर्किटेक्ट थाबो मोकोएना ने पिछले अक्टूबर में एक रूटीन स्कीमा अपडेट पुश किया, तो उनका टेस्ट सूट आसानी से पास हो गया। डिप्लॉयमेंट के कुछ ही घंटों के भीतर, केप टाउन में प्रोडक्शन लॉग्स ने अनहैंडल्ड रनटाइम टाइप एरर्स फेंक दिए। इसका दोषी कोई गायब नल चेक (null check) या असमय रेस कंडीशन नहीं था। यह एक इंटरसेक्शन टाइप था जिसने एक वास्तविकता का वादा किया था जबकि कंपाइलर का गणित कुछ और ही बता रहा था। दक्षिण अफ्रीकी इंजीनियरिंग टीमों में, डेवलपर्स यह महसूस कर रहे हैं कि टाइपस्क्रिप्ट इंटरसेक्शन टाइप्स शायद ही कभी उस तरह से व्यवहार करते हैं जैसा ऑब्जेक्ट-ओरिएंटेड अंतर्ज्ञान सुझाव देता है।
2018 के आसपास सिलिकॉन केप और सैंडटन तकनीकी गलियारों में टाइपस्क्रिप्ट को अपनाए जाने का चलन तेज़ी से बढ़ा। लीगेसी जावास्क्रिप्ट कोडबेस को माइग्रेट करने वाले इंजीनियरिंग लीड्स स्वाभाविक रूप से एम्परसैंड ऑपरेटर की ओर आकर्षित हुए। type AdminUser = User & Permissions लिखना ऑब्जेक्ट स्प्रेडिंग या इनहेरिटेंस के समान महसूस हुआ। टीमों ने इस सिंटैक्स को अपनाया क्योंकि इससे वर्बोस इंटरफेस या क्लास पदानुक्रम की आवश्यकता के बिना कोडबेस संक्षिप्त रहे।
शुरुआती दौर में इस मानसिक मॉडल को बढ़ावा मिला क्योंकि सरल ऑब्जेक्ट शेप्स बिना किसी घर्षण के मिल जाते थे। डेवलपर्स ने बेसिक इंटरसेक्शन का उपयोग करके API पेलोड्स और Redux स्टोर्स के लिए साझा टाइप्स लिखे। पुल रिक्वेस्ट्स में सिंटैक्स साफ-सुथरा लग रहा था, और कंपाइलर ने कोई आपत्ति नहीं जताई। फिर भी इस शुरुआती दौर ने डेवलपर की उम्मीदों और सेट थ्योरी के बीच एक बुनियादी बेमेलता को छिपा दिया।
परेशानी तब शुरू हुई जब कोडबेस बुनियादी प्रॉपर्टी यूनियन से आगे बढ़कर जटिल कंडीशनल टाइप्स तक फैल गए। 2022 तक, टीमों ने अजीबोगरीब बग्स देखे जहां रहस्यमय तरीके से never के रूप में टाइप की गई प्रॉपर्टीज़ ने कंपाइलर को अंधा कर दिया। इंटरसेक्शन Object.assign() या स्प्रेड ऑपरेटर की तरह ऑब्जेक्ट कीज़ को मर्ज नहीं करते हैं। वे सेट इंटरसेक्शन लागू करते हैं। यदि कोई API रिस्पॉन्स टाइप A में id: string और टाइप B में id: number को परिभाषित करता है, तो इंटरसेक्शन id: string & number बनाता है, जो सीधे never के रूप में मूल्यांकित होता है।
📌 मुख्य बिंदु: टाइपस्क्रिप्ट इंटरसेक्शन के दौरान ओवरलैपिंग प्रॉपर्टी टाइप्स को मर्ज नहीं करता है; यह उन्हें इंटरसेक्ट करता है, जिससे कॉन्फ्लिक्टिंग प्रिमिटिव्स बिना किसी चेतावनी फ़्लैग के तुरंत never टाइप में बदल जाते हैं।
कोड रिव्यू करने वाली दक्षिण अफ्रीकी डेवलपमेंट टीमों से ये छुपी हुई विफलताएं छूट गईं क्योंकि टाइपस्क्रिप्ट कंपाइलर ने कोड को सफलतापूर्वक कंपाइल कर दिया था। टाइप डेफिनिशन फैलकर विशाल, न पढ़ने योग्य राक्षसों में बदल गए। इंजीनियरों ने उन असंभव स्थितियों के कारण होने वाली रनटाइम विसंगतियों को डीबग करने में घंटों बिताए, जिनके बारे में कंपाइलर कसम खाता था कि वे वैध हैं। बग्स को पकड़ने के लिए बनाए गए टूल सक्रिय रूप से उन्हें मूल कारण से बचा रहे थे।
"हमने टाइप इंटरसेक्शन को ऑब्जेक्ट्स को मर्ज करने के लिए एक विजुअल शॉर्टहैंड की तरह माना, और अंतर्निहित गणितीय वास्तविकता को तब तक नजरअंदाज किया जब तक कि शुक्रवार की दोपहर को हमारे स्टेजिंग सर्वर क्रैश नहीं हो गए।" — किर्स्टी वान डेर मर्वे, स्टेलनबोश के एक हेल्थ-टेक स्टार्टअप में लीड इंजीनियर।
स्थानीय इंजीनियरिंग समूह अब स्पष्ट कंपोजीशन पैटर्न के पक्ष में आकस्मिक प्रॉपर्टी इंटरसेक्शन को छोड़ रहे हैं। टीमें कंपोनेंट शेप्स को सुरक्षित रूप से प्रबंधित करने के लिए ब्रांडेड टाइप्स, मैप किए गए टाइप्स, और Omit तथा Pick जैसी सहायक यूटिलिटीज को अपना रही हैं। A & B लिखने के बजाय, आधुनिक आर्किटेक्चर दिशा-निर्देश स्पष्ट इंटरफेस एक्सटेंशन या कंडीशनल टाइप गार्ड्स को अनिवार्य बनाते हैं जो लेखक के समय प्रॉपर्टी की अनुकूलता को सत्यापित करते हैं। लीगेसी टाइप्स की हजारों लाइनों को रिफैक्टर करने के लिए सावधानीपूर्वक योजना की आवश्यकता होती है, लेकिन कड़े दायरे स्थापित होने के बाद इंजीनियरिंग लीड्स प्रोडक्शन विसंगतियों में भारी गिरावट की रिपोर्ट करते हैं।
यहाँ वे मुख्य नियम दिए गए हैं जिन्हें स्थानीय टीमें अब लागू करती हैं:
क्या अगली स्केलिंग लहर आने से पहले दक्षिण अफ्रीकी इंजीनियरिंग संस्कृति पूरी तरह से सरल टाइप मर्जिंग से हटकर कठोर सेट-थियोरेटिक डिज़ाइन की ओर अग्रसर होगी? जैसे-जैसे कोडबेस अधिक जटिल होते जाते हैं और एआई-जनरेटेड कोड रिपॉजिटरी में भरता जाता है, हमारे टाइप्स की सटीक गणितीय सीमाओं को समझना गैर-परक्राम्य हो जाता है। कंपाइलर केवल वही जानता है जो हम इसे सत्यापित करना सिखाते हैं।
इंटरसेक्शन टाइप्स ऑब्जेक्ट मर्जिंग के बजाय सेट थ्योरी पर काम करते हैं, जिसका अर्थ है कि कॉन्फ्लिक्टिंग प्रॉपर्टीज़ को एक साथ दोनों टाइप्स को संतुष्ट करना होगा।
इसे शेयर करें
यह लेख उपयोगी लगा? अपने दोस्तों के साथ शेयर करें।
Rate this article
Leave a comment
संबंधित विषय
आपको यह भी पसंद आएगा
आपके लिए चुनी गई खबरें

Next.js v4 को अपनाने में जल्दबाजी कर रही स्थानीय दिल्ली इंजीनियरिंग टीमें एक साइलेंट परफॉर्मेंस दीवार से टकरा रही हैं। जानिए क्यों डिफ़ॉल्ट AVIF रेंडरिंग प्रोडक्शन पाइपलाइनों को तोड़ रही है।





Enjoy this article?
Get fresh stories delivered to your inbox every morning.