TypeScript इंटरव्यू की तैयारी: एडवांस्ड लेवल के टॉप सवाल

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

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

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

TypeScript इंटरव्यू की तैयारी: एडवांस्ड लेवल के टॉप सवाल

\n\n

Senior Frontend या Fullstack डेवलपर की नौकरी के लिए इंटरव्यू में TypeScript के गहरे सवाल पूछे जाना आम बात है। अगर आपको बेसिक टाइप और इंटरफेस अच्छे से आते हैं, तो हाई-ग्रेड टेक्निकल इंटरव्यू पास करने के लिए एडवांस्ड टाइप सिस्टम की समझ जरूरी है। इस आर्टिकल में हमने TypeScript इंटरव्यू में अक्सर पूछे जाने वाले टॉप-5 सवालों और समस्याओं को शामिल किया है। हर पॉइंट को विस्तार से समझाया गया है और कोड उदाहरण दिए गए हैं।

\n\n

1. कंडीशनल टाइप्स (Conditional Types) और infer कीवर्ड

\n\n

कंडीशनल टाइप्स आपको ऐसे टाइप बनाने की अनुमति देते हैं जो किसी शर्त पर निर्भर करते हैं। infer के साथ मिलकर, आप पैटर्न मैचिंग की तरह टाइप के कुछ हिस्सों को "निकाल" सकते हैं।

\n\n

सवाल: बिल्ट-इन ReturnType का उपयोग किए बिना एक ReturnType टाइप लिखें।

\n\n

समाधान: फंक्शन के रिटर्न वैल्यू को कैप्चर करने के लिए infer के साथ कंडीशनल टाइप का उपयोग करें।

\n\n
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;\n\n// उपयोग का उदाहरण\nfunction greet(name: string): string {\n  return `Hello, ${name}`;\n}\n\ntype GreetReturn = MyReturnType<typeof greet>; // string
\n\n

इंटरव्यू में कैसे जवाब दें: समझाएं कि infer R एक नया टाइप वेरिएबल R बनाता है, जो फंक्शन सिग्नेचर से रिटर्न टाइप को कैप्चर करता है। अगर शर्त पूरी नहीं होती (यानी फंक्शन नहीं दिया गया), तो टाइप never हो जाता है।

\n\n

2. मैप्ड टाइप्स (Mapped Types) और मॉडिफायर्स

\n\n

मैप्ड टाइप्स आपको मौजूदा टाइप के प्रॉपर्टीज को बदलकर नए टाइप बनाने की सुविधा देते हैं। एडवांस्ड लेवल में +, -, as मॉडिफायर्स और keyof के साथ काम करना शामिल है।

\n\n

सवाल: एक DeepReadonly टाइप बनाएं जो ऑब्जेक्ट के सभी प्रॉपर्टीज (नेस्टेड सहित) को readonly बना दे।

\n\n
type DeepReadonly<T> = {\n  readonly [K in keyof T]: T[K] extends Record<string, unknown> \n    ? DeepReadonly<T[K]> \n    : T[K];\n};\n\ninterface User {\n  name: string;\n  address: {\n    city: string;\n    zip: number;\n  };\n}\n\ntype ReadonlyUser = DeepReadonly<User>;\n// सभी प्रॉपर्टीज readonly हो गईं, address.city भी शामिल
\n\n

कैसे जवाब दें: नेस्टेड ऑब्जेक्ट्स के लिए DeepReadonly का रिकर्सिव कॉल दिखाएं। समझाएं कि कैसे Record<string, unknown> का उपयोग यह जांचने के लिए किया जाता है कि वैल्यू एक ऑब्जेक्ट है या नहीं।

\n\n

3. टेम्पलेट लिटरल टाइप्स (Template Literal Types)

\n\n

टेम्पलेट लिटरल टाइप्स आपको कंपाइल टाइम पर स्ट्रिंग टाइप्स में हेरफेर करने की अनुमति देते हैं। यह सख्त API बनाने के लिए एक शक्तिशाली उपकरण है।

\n\n

सवाल: एक EventName टाइप बनाएं जो एक स्ट्रिंग लेता है और सही Capitalize के साथ "on{स्ट्रिंग}" टाइप लौटाता है।

\n\n
type EventName<T extends string> = `on${Capitalize<T>}`;\n\ntype ClickEvent = EventName<'click'>; // "onClick"\ntype FocusEvent = EventName<'focus'>; // "onFocus"\n\n// एडवांस्ड उदाहरण: स्ट्रिंग से निकालना\ntype ExtractAction<T extends string> = \n  T extends `on${infer Action}` ? Uncapitalize<Action> : never;\n\ntype Action = ExtractAction<'onSubmit'>; // "submit"
\n\n

कैसे जवाब दें: बिल्ट-इन टाइप्स Capitalize और Uncapitalize पर ध्यान दें। दिखाएं कि कैसे infer स्ट्रिंग्स को पार्स करने के लिए टेम्पलेट लिटरल्स के अंदर काम करता है।

\n\n

4. जेनेरिक्स (Generics) बाधाओं और वेरिएडिक टपल टाइप्स (Variadic Tuple Types) के साथ

\n\n

वेरिएडिक टपल टाइप्स (TS 4.0 में आए) आपको मनमानी लंबाई के टपल्स के साथ काम करने की अनुमति देते हैं। यह वेरिएबल नंबर ऑफ आर्गुमेंट्स वाले टाइप-सेफ फंक्शन बनाने के लिए अपरिहार्य है।

\n\n

सवाल: एक फंक्शन के लिए टाइप लिखें जो कई आर्गुमेंट्स लेता है और उन्हें एक ऐरे में जोड़ता है।

\n\n
function concat<T extends unknown[]>(...args: [...T]): T {\n  return args;\n}\n\n// उपयोग का उदाहरण\nconst result = concat(1, 'hello', true); \n// result का टाइप: [number, string, boolean]
\n\n

कैसे जवाब दें: समझाएं कि [...T] सिंटैक्स कैसे टपल को फैलाता है और सही टाइप इन्फरेंस सुनिश्चित करता है। बताएं कि यह concat जैसे फंक्शन्स के लिए कैसे उपयोगी है।

ब्लॉग

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