TypeScript इंटरव्यू में यह देखा जाता है कि आप टाइप सिस्टम को समझते हैं या नहीं, सिर्फ़ सिंटैक्स नहीं। नीचे 20 सवाल और उनके जवाब हैं, बेसिक्स से लेकर उन सवालों तक जो यह तय करते हैं कि आप TypeScript इस्तेमाल करते हैं या यह भी जानते हैं कि यह काम क्यों करता है। कोड को पब्लिश करने से पहले TypeScript कंपाइलर में strict मोड में कंपाइल किया गया है, और जो एरर मैसेज दिए गए हैं वे असली हैं।
बेसिक्स
1. TypeScript, JavaScript में क्या जोड़ता है?
एक स्टैटिक टाइप सिस्टम जो कंपाइल टाइम पर चेक होता है और फिर हटा दिया जाता है। आउटपुट सादा JavaScript होता है, इसलिए टाइप्स का न रनटाइम पर कोई खर्च है और न ही रनटाइम पर कोई वजूद। यह आखिरी बात अहम है: रनटाइम पर typeof से टाइप चेक नहीं कर सकते, जब तक कि आप खुद वह चेक न लिखें।
2. type और interface में क्या फ़र्क़ है?
दोनों ऑब्जेक्ट शेप बताते हैं और अक्सर एक-दूसरे की जगह काम करते हैं। व्यावहारिक फ़र्क़:
| interface | type | |
|---|---|---|
| डिक्लरेशन मर्जिंग | हाँ, दो डिक्लरेशन मर्ज हो जाते हैं | नहीं, डुप्लिकेट नाम एरर देता है |
| यूनियन और प्रिमिटिव | इन्हें नहीं बता सकते | इन्हें बता सकते हैं, जैसे number और string की यूनियन |
| एक्सटेंड करना | extends | & के साथ इंटरसेक्शन |
| मैप्ड और कंडीशनल टाइप्स | नहीं | हाँ |
interface A दो बार डिक्लेयर करने पर फ़ील्ड्स मर्ज हो जाते हैं। type B दो बार डिक्लेयर करने पर error TS2300: Duplicate identifier 'B' आता है। एक आम नियम: पब्लिक ऑब्जेक्ट शेप के लिए interface इस्तेमाल करें जिन्हें दूसरे एक्सटेंड कर सकें, और बाकी सबके लिए type।
3. any, unknown और never में क्या फ़र्क़ है?
- any चेकिंग बंद कर देता है। कुछ भी चलेगा, और एरर छिप जाते हैं।
- unknown इसका सुरक्षित वर्ज़न है। इसमें कुछ भी असाइन कर सकते हैं, लेकिन इस्तेमाल से पहले इसे नैरो करना पड़ेगा। किसी unknown पर x.toFixed() कॉल करने पर error TS18046: 'x' is of type 'unknown' आता है।
- never उन वैल्यूज़ का टाइप है जो हो ही नहीं सकतीं, जैसे कोई फ़ंक्शन जो हमेशा थ्रो करता है। यह एक्सहॉस्टिव चेक के लिए काम आता है।
जिन वैल्यूज़ का टाइप आपके कंट्रोल में नहीं है, जैसे पार्स किया गया JSON, उनके लिए any की जगह unknown चुनें।
4. strict मोड क्या करता है?
यह कई चेक्स चालू करता है, ख़ास तौर पर strictNullChecks (जिससे null और undefined अलग टाइप बन जाते हैं) और noImplicitAny। इसके साथ, किसी ऑप्शनल वैल्यू को बिना चेक किए इस्तेमाल करने पर error TS18048: 'x' is possibly 'undefined' आता है। नए प्रोजेक्ट्स strict चालू करके ही शुरू करने चाहिए।
5. readonly और const में क्या फ़र्क़ है?
const किसी वेरिएबल को दोबारा असाइन होने से रोकता है। readonly किसी प्रॉपर्टी को असाइन होने से रोकता है। readonly प्रॉपर्टी में लिखने पर error TS2540: Cannot assign to 'n' because it is a read-only property आता है। दोनों में से कोई भी अंदरूनी ऑब्जेक्ट को पूरी तरह इम्यूटेबल नहीं बनाता।
प्रैक्टिस में टाइप्स
6. यूनियन टाइप्स क्या हैं और इन्हें नैरो कैसे करते हैं?
यूनियन का मतलब है "इनमें से कोई एक टाइप"। नैरोइंग में वे चेक्स इस्तेमाल होते हैं जिन्हें कंपाइलर समझता है:
type Id = number | string;
function describe(id: Id): string {
if (typeof id === "string") return id.toUpperCase();
return id.toFixed(1);
}
if के अंदर id एक string है। उसके बाद कंपाइलर जानता है कि यह number है। नैरोइंग के दूसरे टूल्स हैं instanceof, in ऑपरेटर, इक्वलिटी चेक्स, और कस्टम टाइप गार्ड्स।
7. डिस्क्रिमिनेटेड यूनियन क्या है?
ऐसी यूनियन जिसके हर मेंबर में एक साझा लिटरल फ़ील्ड होता है, जिसे डिस्क्रिमिनेंट कहते हैं, जो उन्हें अलग-अलग पहचानता है:
type Shape =
| { kind: "circle"; r: number }
| { kind: "sq"; s: number };
function assertNever(x: never): never {
throw new Error("unexpected " + x);
}
function area(s: Shape): number {
switch (s.kind) {
case "circle": return Math.PI * s.r ** 2;
case "sq": return s.s ** 2;
default: return assertNever(s);
}
}
अगर बाद में कोई नया शेप जोड़ें और कोई case भूल जाएँ, तो default ब्रांच कंपाइल होना बंद कर देती है, क्योंकि s अब never नहीं रहता। यही एक्सहॉस्टिव चेक है।
8. जेनेरिक्स क्या हैं, और इन्हें क्यों इस्तेमाल करें?
ये किसी फ़ंक्शन या टाइप को कई टाइप्स पर काम करने देते हैं, साथ ही उनके बीच का रिश्ता भी बनाए रखते हैं:
function first<T>(xs: T[]): T | undefined { return xs[0]; }
function pick<T, K extends keyof T>(o: T, k: K): T[K] { return o[k]; }
first([1, 2]) number | undefined रिटर्न करता है, any नहीं। pick(user, "name") name का टाइप रिटर्न करता है। extends keyof T कंस्ट्रेंट आपको ऐसी की पास करने से रोकता है जो मौजूद ही नहीं है।
9. आम यूटिलिटी टाइप्स कौन-कौन से हैं?
| यूटिलिटी | यह क्या करती है |
|---|---|
| Partial<T> | हर प्रॉपर्टी को ऑप्शनल बना देती है |
| Required<T> | हर प्रॉपर्टी को ज़रूरी बना देती है |
| Readonly<T> | हर प्रॉपर्टी को readonly बना देती है |
| Pick<T, K> | सिर्फ़ बताई गई कीज़ रखती है |
| Omit<T, K> | बताई गई कीज़ हटा देती है |
| Record<K, V> | K कीज़ और V वैल्यूज़ वाला ऑब्जेक्ट टाइप |
| ReturnType<F> | किसी फ़ंक्शन टाइप का रिटर्न टाइप |
10. मैप्ड टाइप्स क्या हैं?
ये किसी दूसरे टाइप की कीज़ पर लूप चलाकर नया टाइप बनाते हैं। Partial खुद { [K in keyof T]?: T[K] } के रूप में लिखा जाता है। यह जानना दिखाता है कि आप यूटिलिटी टाइप्स को रटते नहीं, समझते हैं।
11. as const क्या है?
यह कंपाइलर से कहता है कि सबसे संकरा टाइप इनफ़र करे और सब कुछ readonly मार्क कर दे। const arr = [1, 2, 3] as const का टाइप readonly [1, 2, 3] होता है, और arr.push(4) पर error TS2339: Property 'push' does not exist on type 'readonly [1, 2, 3]' आता है। यह अनुमत वैल्यूज़ की लिस्ट और कॉन्फ़िगरेशन ऑब्जेक्ट्स के लिए काम आता है।
12. टाइप असर्शन क्या है, और यह कब ख़तरनाक है?
value as Type कंपाइलर से कहता है कि आप पर भरोसा करे। यह रनटाइम पर कोई चेक नहीं करता। अगर आप ग़लत हैं, तो एरर बाद में क्रैश के रूप में सामने आता है। असर्शन की जगह चेक के साथ नैरोइंग, या टाइप गार्ड फ़ंक्शन, चुनें।
भाषा व्यवहार
13. null और undefined में क्या अंतर है?
undefined का मतलब है कि किसी वैल्यू को कभी असाइन ही नहीं किया गया, और null का मतलब है जानबूझकर "कोई वैल्यू नहीं" सेट करना। strictNullChecks के साथ, ये दोनों अलग-अलग टाइप होते हैं। इन्हें संभालने के लिए optional chaining (a?.b) और nullish coalescing (a ?? b) का इस्तेमाल करें। || के उलट, ?? सिर्फ़ null और undefined के लिए fallback देता है, इसलिए 0 और खाली string बचे रहते हैं।
14. non-null assertion ! क्या है?
value! कंपाइलर को बताता है कि वैल्यू null या undefined नहीं है। as की तरह, यह भी बिना जाँच के होता है। कुछ जगहों पर जहाँ आप कंपाइलर से बेहतर जानते हैं, यह ठीक है, लेकिन आम तौर पर runtime check ज़्यादा सुरक्षित होता है।
15. keyof क्या करता है, और type position में typeof क्या है?
keyof T आपको T के प्रॉपर्टी नामों का union देता है। type position में, typeof x किसी वैल्यू का टाइप ले लेता है, जिससे उसे दोबारा लिखने की ज़रूरत नहीं पड़ती। दोनों को मिलाकर, keyof typeof obj उस ऑब्जेक्ट की keys देता है जिसे आपने वैल्यू के रूप में define किया था।
16. enums की तुलना union types से कैसे होती है?
Enums एक runtime ऑब्जेक्ट और वैल्यूज़ बनाते हैं। string literals का union, जैसे "idle" | "loading", compile time पर हटा दिया जाता है और इसके लिए कोई अतिरिक्त कोड नहीं चाहिए। कई टीमें सादगी के लिए string literal unions पसंद करती हैं और enums तब इस्तेमाल करती हैं जब उन्हें runtime ऑब्जेक्ट की ज़रूरत होती है।
टूलिंग और असली प्रोजेक्ट्स
17. tsconfig.json क्या करता है, और कौन-से options मायने रखते हैं?
यह कंपाइलर को बताता है कि कौन-सी फ़ाइलें शामिल करनी हैं और उन्हें कैसे जाँचना है। इंटरव्यूअर जिन options के बारे में पूछते हैं: strict, target (जो JavaScript वर्ज़न emit करना है), module और moduleResolution, noEmit (सिर्फ़ जाँच, जो आम है जब कोई और टूल build करता है), esModuleInterop, और skipLibCheck।
18. बाहर से आने वाली चीज़ को कैसे type करें, जैसे API response?
Types runtime पर गायब हो जाते हैं, इसलिए कंपाइलर यह सत्यापित नहीं कर सकता कि नेटवर्क क्या लौटाता है। डेटा को unknown मानें, फिर इस्तेमाल करने से पहले किसी schema library या हाथ से लिखे type guard से validate करें। parsed JSON पर type assert करना bugs छिपा देता है।
19. JavaScript प्रोजेक्ट को TypeScript में कैसे migrate करें?
इसे धीरे-धीरे करें। allowJs के साथ एक tsconfig.json जोड़ें, एक-एक करके फ़ाइलों का नाम बदलें, समय के साथ सख़्त options चालू करें, और सबसे पहले boundaries पर types जोड़ें, जैसे API clients और shared utilities। एक बार में पूरा rewrite करने से बचें।
20. structural typing क्या है?
TypeScript types की तुलना नाम से नहीं, आकार से करता है। अगर किसी ऑब्जेक्ट में वे fields हैं जो एक type माँगता है, तो उसे स्वीकार कर लिया जाता है, भले ही उसे कभी उस type के रूप में declare न किया गया हो। यह उन भाषाओं से अलग है जो nominal typing इस्तेमाल करती हैं, जहाँ declared नाम मायने रखता है।
तैयारी कैसे करें
- strict mode में एक playground या छोटा प्रोजेक्ट खोलें और ऊपर दिए हर उदाहरण को आज़माएँ, उन सहित जो fail होने चाहिए।
- याद से एक generic function और एक discriminated union लिखने के लिए तैयार रहें।
- जानें कि any की जगह unknown क्यों चुनेंगे।
- असली प्रोजेक्ट में किसी अजीब चीज़ को type करने की एक कहानी तैयार रखें।
संबंधित अभ्यास के लिए, हमारी गाइड देखें: Node.js interview questions, Angular interview questions, और Python interview questions।
ज़ोर से और अपने शब्दों में अभ्यास करें। बाद में एक transcript दिखाता है कि आपने कहाँ भटकाव किया या मुख्य बात छोड़ दी। किसी भी live interview या assessment में AI tools पर नियोक्ता के नियमों का पालन करें।
YesToTheOffer के साथ अपने उत्तरों का अभ्यास करें
जोर से अभ्यास करें, अपने ही रिज्यूमे से उत्तर बनाएं, और बाद में अपना ट्रांसक्रिप्ट देखें। 30 मुफ्त मिनट, कोई सब्सक्रिप्शन नहीं।



