TypeScript में ?. ऑपरेटर: Optional Chaining का पूरा गाइड

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

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

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

परिचय: शुरुआती लोगों को परेशान करने वाला सवाल

\n

क्या आपने कभी TypeScript में कोड लिखते हुए Cannot read property 'name' of undefined जैसी एरर देखी है? यह दर्द तो आप जानते ही हैं, है ना? खासकर जब आप सर्वर से आने वाले डेटा या गहराई से नेस्टेड ऑब्जेक्ट्स के साथ काम कर रहे हों। ऐसे ही पलों में यह सवाल उठता है: "क्या TypeScript में कोई ऐसा ऑपरेटर है जो बिना एरर के प्रॉपर्टीज तक सुरक्षित पहुंच दे?"

\n

Stack Overflow पर इस सवाल को हज़ारों बार देखा जा चुका है। और जवाब है — हाँ, ऐसा ऑपरेटर मौजूद है। इसके अलावा, यह JavaScript (ES2020 से) और TypeScript दोनों में 'बिल्ट-इन' आता है। इसे optional chaining (ऑप्शनल चेनिंग) कहते हैं, और यह ?. के रूप में दिखता है। इस लेख में हम न सिर्फ इसका उपयोग बताएंगे, बल्कि यह भी देखेंगे कि TypeScript कंपाइलर इस सिंटैक्स को सुरक्षित JavaScript कोड में कैसे बदलता है।

\n\n

TypeScript में ?. ऑपरेटर को क्या कहते हैं?

\n

चलिए सबसे ज़रूरी बात से शुरू करते हैं। डेवलपर समुदाय में इस ऑपरेटर को अलग-अलग नामों से जाना जाता है:

\n
    \n
  • Optional chaining (ऑप्शनल चेनिंग) — ECMAScript स्पेसिफिकेशन में आधिकारिक नाम।
  • \n
  • सुरक्षित एक्सेस ऑपरेटर (Safe navigation operator) — यह C# और Swift जैसी अन्य भाषाओं से आया है।
  • \n
  • Null-conditional operator — Microsoft के डॉक्यूमेंटेशन में मिलता है।
  • \n
\n

लेकिन सार एक ही है: ?. आपको ऑब्जेक्ट की प्रॉपर्टी तक पहुंचने देता है, और अगर ऑब्जेक्ट null या undefined है, तो एरर देने के बजाय हमें बस undefined मिलता है। यह कोई जादू नहीं, बल्कि सिंटैक्टिक शुगर है जो कोड को साफ और सुरक्षित बनाता है।

\n\n

बेसिक सिंटैक्स

\n

सिंटैक्स बेहद सरल है। इसके बजाय कि आप लिखें:

\n
if (user && user.profile && user.profile.name) {\n    console.log(user.profile.name);\n}
\n

आप लिखते हैं:

\n
console.log(user?.profile?.name);
\n

अगर user — undefined है, तो पूरी चेन टूट जाती है और कंसोल में undefined प्रिंट होता है। कोई एरर नहीं, कोई अतिरिक्त चेक नहीं। कितना आसान है!

\n\n

यह अंदरूनी तौर पर कैसे काम करता है: TypeScript से JavaScript में कंपाइलेशन

\n

TypeScript, JavaScript के ऊपर एक लेयर है। यह कोड को सीधे एक्ज़ीक्यूट नहीं करता, बल्कि इसे सामान्य JS में कंपाइल करता है। तो आइए देखते हैं कि हमारा सुंदर user?.profile?.name कंपाइलेशन के बाद क्या बनता है।

\n\n

उदाहरण: सरल optional chaining

\n

TypeScript में मूल कोड:

\n
const name = user?.profile?.name;
\n

कंपाइलेशन के बाद (लक्ष्य — ES5):

\n
var name = user === null || user === void 0 ? void 0 : user.profile === null || user.profile === void 0 ? void 0 : user.profile.name;
\n

यहाँ क्या हो रहा है? कंपाइलर एक टर्नरी ऑपरेटर जनरेट करता है जो हर नेस्टेड लेवल को null या undefined के लिए चेक करता है। अगर वैल्यू null या undefined है, तो void 0 रिटर्न होता है (यह पुराने इंजनों पर undefined पाने का एक भरोसेमंद तरीका है)। अगर नहीं, तो आगे बढ़ते हैं। असल में, यह वही 'मैन्युअल' कोड है जो हम पहले लिखते थे, लेकिन अब इसे मशीन जनरेट करती है।

\n\n

उदाहरण: फंक्शन कॉल के साथ optional chaining

\n

?. ऑपरेटर सिर्फ प्रॉपर्टीज के साथ ही नहीं, बल्कि फंक्शन कॉल के साथ भी काम करता है। मान लीजिए हमारे पास एक getAddress मेथड है जो मौजूद नहीं भी हो सकता:

\n
const address = user?.getAddress?.();
\n

कंपाइलेशन के बाद:

\n
var address = user === null || user === void 0 ? void 0 : (typeof user.getAddress === "function" ? user.getAddress() : void 0);
\n

ध्यान दें: कंपाइलर सिर्फ null चेक नहीं करता, बल्कि यह भी सुनिश्चित करता है कि getAddress एक फंक्शन है, उसे कॉल करने से पहले। अगर यह फंक्शन नहीं है, तो undefined रिटर्न होता है।

ब्लॉग

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