structural typing का मतलब है कि मेल शक्ल से तय होता है, घोषित नाम से नहीं, तो सही properties वाला कोई भी object उस type पर खरा उतरता है। इससे types सस्ते और जोड़ने लायक बनते हैं, पर इसका यह भी मतलब है कि एक जैसी शक्ल वाले दो असंबंधित concepts आपस में बदले जा सकते हैं, तो जहां orderId string चाहिए वहां userId string चला जा सकता है। इसका आम इलाज है branded type या कोई छोटा wrapper जो value को अलग शक्ल दे दे।
इंटरव्यूअर यह क्यों पूछते हैं
यह उन लोगों को अलग करता है जो लाल लकीरें रुकने तक annotations जोड़ते रहते हैं और जो type सिस्टम से bugs की पूरी श्रेणियां रोकते हैं। इंटरव्यूअर जांच रहा है कि आपको पता है कि types runtime पर मिट जाते हैं, कि excess property checks सिर्फ object literals पर चलती हैं, और आप domain को ऐसे कैसे गढ़ते हैं कि गलत values बनाई ही न जा सकें। यह आमतौर पर discriminated unions और सीमा पर validation तक ले जाता है।
अपना जवाब कैसे स्ट्रक्चर करें
- structural typing को एक लाइन में परिभाषित करें और nominal typing से तुलना करें।
- नाकामी का मामला दें: एक जैसी शक्ल वाले दो types जिनके मतलब अलग हैं।
- branded type या wrapper वाला इलाज समझाएं।
- बताएं कि types runtime पर गायब हो जाते हैं, तो सीमाओं पर validation ज़रूरी है।
उदाहरण जवाब
इसका मतलब है कि TypeScript नाम नहीं, शक्ल की तुलना करता है, तो अगर किसी चीज़ में सही properties हैं तो वह assign हो जाएगी, चाहे वह कहीं से भी आई हो। यह ज़्यादातर वरदान है, क्योंकि इससे types रस्म की जगह दस्तावेज़ जैसे लगते हैं। यह वहां काटता है जहां दो types की शक्ल एक है पर concept अलग। मेरी सारी ids सादी strings थीं, तो order id की उम्मीद करने वाले function में user id भेजना बिल्कुल ठीक compile हुआ और प्रोडक्शन में फेल हुआ। मैंने इसे branded types से ठीक किया, यानी एक अनोखे tag के साथ intersection जिसे सिर्फ एक constructor function बना सकता है, ताकि compiler उन्हें एक जैसा मानना बंद कर दे। दूसरा जाल यह है कि types मिट जाते हैं, तो runtime पर API के response को कोई नहीं जांचता। सीमा पार करने वाली हर चीज़ को मैं schema validator से parse करता हूं और उसी से निकला type आगे बहने देता हूं, जिसका मतलब है कि type और असली डेटा एक दूसरे से हट नहीं सकते। और मुझे पता है कि excess property checking सिर्फ ताज़ा object literals पर लगती है, जिससे यह उलझन काफी हद तक साफ हो जाती है कि कोई अतिरिक्त field कभी error क्यों होती है और कभी नहीं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- बिना runtime लागत के branded type कैसे बनाएंगे?
- any की जगह unknown कब इस्तेमाल करते हैं, और आपको narrow करने पर क्या मजबूर करता है?
- runtime पर API के types ईमानदार कैसे रखते हैं?
फ्रंटएंड डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें