TypeScript जीत गया। वास्तव में हमें इससे क्या मिला।
अब कोई TypeScript के उपयोग पर बहस नहीं करता। नए प्रोजेक्ट्स में इसे डिफ़ॉल्ट रूप से उपयोग किया जाता है। बहस खत्म हो चुकी है।
इसका असली मूल्य केवल टाइपिंग की गलतियों (typos) को पकड़ना नहीं है। यह उससे कहीं अधिक है।
एक फ़ंक्शन सिग्नेचर (function signature) दस्तावेज़ (documentation) के रूप में कार्य करता है। यह कभी पुराना या गलत नहीं होता। यदि कोड बदलता है, तो कंपाइलर बिल्ड को फेल कर देता है।
इस फ़ंक्शन को देखें:
function scheduleReminder(
userId: string,
at: Date,
channel: "email" | "push" | "sms",
): Promise<ReminderId>;
आप जानते हैं कि इसे ठीक से कैसे कॉल करना है। आप जानते हैं कि इसे क्या चाहिए और यह क्या रिटर्न करता है। आप जानते हैं कि चैनल इन तीन विशिष्ट स्ट्रिंग्स में से एक होना चाहिए।
यदि आप बाद में "slack" विकल्प जोड़ते हैं, तो कंपाइलर आपको अपने कोड के हर हिस्से को अपडेट करने के लिए मजबूर करता है। एक कमेंट (comment) बस पुराना होकर आपको गलत जानकारी दे सकता है।
बिना टाइप वाले कोड (untyped code) में, किसी फ़ील्ड का नाम बदलना डरावना लगता है। आप स्ट्रिंग्स को खोजते हैं और बस उम्मीद करते हैं कि सब ठीक रहे। TypeScript में, आप टाइप बदलते हैं। कंपाइलर आपको उन सभी चीज़ों की 'टू-डू लिस्ट' दे देता है जो टूट गई हैं। रिफैक्टरिंग (Refactoring) सुरक्षित हो जाती है।
टाइप्स (Types) AI में भी मदद करते हैं।
एक AI मॉडल JavaScript में कोड के स्वरूप (shapes) का अनुमान लगाता है। TypeScript में, टाइप ही स्पेसिफिकेशन (specification) है। AI जानता है कि क्या अनुमति है। गलतियाँ प्रोडक्शन क्रैश के बजाय एरर (errors) के रूप में सामने आती हैं।
टाइप्स गार्डरेल्स (guardrails) के रूप में कार्य करते हैं। वे आपको हर लाइन को हाथ से चेक करने के बजाय आत्मविश्वास के साथ AI कोड का उपयोग करने देते हैं।
इन नियमों के साथ बेहतर टाइप्स लिखें:
• कई booleans के बजाय unions का उपयोग करें। "loading" | "error" | "ready" जैसा स्टेटस तीन अलग-अलग फ्लैग्स (flags) से बेहतर है।
• अपने डोमेन टाइप्स (domain types) को नाम दें। इरादा (intent) दिखाने के लिए type Cents = number का उपयोग करें।
• any से बचें। इसके बजाय unknown का उपयोग करें और टाइप को नैरो (narrow) करें।
• इन्फरेंस (inference) को अपना काम करने दें। फ़ंक्शन सिग्नेचर जैसे अपने बाउंड्रीज़ (boundaries) को एनोटेट (annotate) करें, लेकिन बाकी चीज़ों को स्वाभाविक रूप से बहने दें।
TypeScript ने कोडबेस को लागू किए गए कॉन्ट्रैक्ट्स (enforced contracts) के सेट में बदल दिया है। ये कॉन्ट्रैक्ट्स निडर रिफैक्टरिंग और विश्वसनीय AI सहायता को सक्षम बनाते हैं।
हमने बग्स को रोकने के लिए टाइप्स का उपयोग करना शुरू किया था। हम उनका उपयोग करना जारी रखते हैं क्योंकि वे बाकी सब कुछ के लिए आधार (foundation) हैं।
स्रोत: https://dev.to/parsajiravand/typescript-won-heres-what-that-actually-bought-us-53lo
