सुप्रभात, TypeScript: डेवलपर का दिन कैसे शुरू होता है
\n\nकल्पना करें: सुबह के 9:00 बजे। आप लैपटॉप खोलते हैं, कॉफी बनाते हैं और Telegram पर एक सहकर्मी का संदेश देखते हैं: "सुनो, मैंने कल एक फंक्शन लिखा था, लेकिन TypeScript unknown टाइप पर आपत्ति जता रहा है। मदद करो!" परिचित लग रहा है? TypeScript डेवलपर के एक सामान्य कार्य दिवस में आपका स्वागत है। यह सिर्फ कोड लिखना नहीं है - यह सख्त टाइपिंग, डेडलाइन और अंतहीन रिफैक्टरिंग के बीच संतुलन बनाने की कला है।
\n\nइस लेख में मैं आपको TypeScript डेवलपर के जीवन का एक वास्तविक दिन दिखाऊंगा: सुबह की स्टैंडअप मीटिंग से लेकर शाम के कमिट तक। आप लाइव कोड उदाहरण, सामान्य समस्याएं और उन्हें हल करने के तरीके देखेंगे। चलिए शुरू करते हैं!
\n\nसुबह: स्टैंडअप और कोड-रिव्यू
\n\n9:30 — डेली स्टैंडअप
\n\nटीम के साथ एक छोटी मीटिंग। आप कहते हैं: "कल मैंने ऑथराइजेशन मॉड्यूल पूरा कर लिया, आज मैं API से रिस्पॉन्स की टाइपिंग को समझने की योजना बना रहा हूं।" और तुरंत सुनते हैं: "क्या तुम इंटरफेस को एक अलग फाइल में नहीं निकालना चाहोगे? हमारा कोड स्टाइल तो यही है।" TypeScript डेवलपर हमेशा एक कदम आगे सोचता है: इंटरफेस, जेनेरिक्स, यूटिलिटी टाइप्स।
\n\nउदाहरण: आप सर्वर से रिस्पॉन्स की टाइपिंग पर चर्चा कर रहे हैं। any लिखने के बजाय, आप सुझाव देते हैं:
interface ApiResponse<T> {\n data: T;\n error: string | null;\n status: number;\n}\n\ntype User = {\n id: string;\n name: string;\n email: string;\n};\n\n// उपयोग\nconst response: ApiResponse<User[]> = await fetchUsers();\n\n\nसहकर्मी सिर हिलाते हैं - यह सही तरीका है। TypeScript डेवलपर जानता है: अच्छी टाइपिंग आधी सफलता है।
\n\n10:00 — कोड-रिव्यू: बग्स को हमें खोजने से पहले खोजना
\n\nस्टैंडअप के बाद आप एक जूनियर का Pull Request खोलते हैं। उसने ईमेल वैलिडेशन के लिए एक फंक्शन लिखा है। कोड काम करता है, लेकिन TypeScript संकेत देता है: Type 'string | undefined' is not assignable to type 'string'। आप एक टिप्पणी छोड़ते हैं:
// ❌ समस्या: null/undefined को हैंडल नहीं किया गया\nfunction validateEmail(input: string | null | undefined): boolean {\n if (!input) return false;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(input);\n}\n\n// ✅ समाधान: गार्ड्स और ऑप्शनल चेनिंग का उपयोग करें\nfunction validateEmail(input: unknown): input is string {\n return typeof input === 'string' && \n input.length > 0 && \n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(input);\n}\n\n\nआप समझाते हैं: TypeScript डेवलपर हमेशा किनारे के मामलों के बारे में सोचता है। टाइपिंग सीमाओं के बारे में नहीं है, बल्कि सुरक्षा के बारे में है।
\n\nदोपहर: कोड लिखना और जेनेरिक्स के साथ काम करना
\n\n11:30 — दिन का मुख्य कार्य: लीगेसी कोड का रिफैक्टरिंग
\n\nआप एक पुराने JavaScript मॉड्यूल को लेते हैं जिसे TypeScript में फिर से लिखा जाना है। इसमें एक फंक्शन है जो "कुछ भी" लेता है और "कुछ भी" लौटाता है। क्लासिक:
\n\n// 🚫 पुराना JS कोड\nfunction processData(data) {\n if (data.type === 'user') {\n return { id: data.id, name: data.name };\n }\n if (data.type === 'order') {\n return { orderId: data.id, total: data.total };\n }\n return null;\n}\n\n\nआप इसे discriminated unions का उपयोग करके सख्ती से टाइप किए गए कोड में बदलते हैं:
\n\n// ✅ TypeScript संस्करण\ntype UserData = { type: 'user'; id: string; name: string };\ntype OrderData = { type: 'order'; id: string; total: number };\ntype InputData = UserData | OrderData;\n\ntype ProcessedResult<T> = T extends UserData \n ? { id: string; name: string }\n : T extends OrderData \n ? { orderId: string; total: number }\n : never;\n\nfunction processData<T extends InputData>(data: T): ProcessedResult<T> {\n if (data.type === 'user') {\n return { id: data.id, name: data.name } as ProcessedResult<T>;\n }\n return { orderId: data.id, total: data.total } as ProcessedResult<T>;\n}\n\n\nअब TypeScript स्वचालित रूप से इनपुट डेटा के आधार पर सही परिणाम टाइप का अनुमान लगाता है। सहकर्मी