Narrowing: typeof, instanceof, discriminated unions
typeof, instanceof और discriminated union patterns से runtime पर union types को narrow करने के लिए type guards का उपयोग करें।
Narrowing: typeof, instanceof, discriminated unions, CoddyKit पर Frontend Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Frontend Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Frontend Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रकार-संकीर्णन क्या है
TypeScript एक व्यापक प्रकार से शुरू होता है, जैसे string | number। संकीर्णन वह प्रक्रिया है जिसमें किसी सशर्त ब्लॉक के भीतर प्रकार को अधिक विशिष्ट बनाया जाता है। TypeScript संकीर्णन को स्वचालित रूप से ट्रैक करता है।
typeof द्वारा प्रकार-संकीर्णन
typeof ऑपरेटर आदिम प्रकारों को संकीर्ण करता है। किसी if ब्लॉक के भीतर TypeScript को सटीक प्रकार पता होता है।
function format(value: string | number | boolean): string {
if (typeof value === 'string') {
return value.toUpperCase(); // string here
}
if (typeof value === 'number') {
return value.toFixed(2); // number here
}
return String(value); // boolean here
}instanceof द्वारा प्रकार-संकीर्णन
instanceof वर्ग के उदाहरणों को संकीर्ण करता है। ब्लॉक के भीतर TypeScript को विशिष्ट वर्ग पता होता है।
function processError(err: unknown) {
if (err instanceof Error) {
console.error(err.message); // Error methods available
} else if (err instanceof Response) {
console.error('HTTP error:', err.status);
} else {
console.error('Unknown:', err);
}
}सत्यता द्वारा प्रकार-संकीर्णन
सत्य-जाँच में TypeScript null और undefined को प्रकार से हटा देता है।
function printLength(value: string | null | undefined) {
if (value) {
console.log(value.length); // string here (null/undefined filtered)
}
}समानता द्वारा प्रकार-संकीर्णन
सख्त समानता प्रकार को लिटरल प्रकार तक संकीर्ण करती है। यह विभेदित यूनियन और स्ट्रिंग एनम के लिए उपयोगी है।
function handle(action: 'submit' | 'cancel' | 'reset') {
if (action === 'submit') {
// action is exactly 'submit'
doSubmit();
}
}in ऑपरेटर द्वारा प्रकार-संकीर्णन
in ऑपरेटर यह जाँचकर ऑब्जेक्ट यूनियन प्रकारों को संकीर्ण करता है कि कौन-सी प्रॉपर्टीज़ मौजूद हैं।
interface Cat { meow(): void; }
interface Dog { bark(): void; }
function speak(animal: Cat | Dog) {
if ('meow' in animal) {
animal.meow(); // Cat
} else {
animal.bark(); // Dog
}
}विभेदित यूनियन — टैग-आधारित संकीर्णन
विभेदित यूनियन में एक साझा लिटरल-प्रकार की प्रॉपर्टी होती है, जिसे विभेदक कहा जाता है। TypeScript उस प्रॉपर्टी के आधार पर switch/if में यूनियन को संकीर्ण करता है।
type LoadingState = { status: 'loading' };
type SuccessState = { status: 'success'; data: User[] };
type ErrorState = { status: 'error'; message: string };
type State = LoadingState | SuccessState | ErrorState;
function render(state: State) {
switch (state.status) {
case 'loading': return '<Spinner />';
case 'success': return renderUsers(state.data); // state.data available
case 'error': return renderError(state.message);
}
}प्रकार प्रेडिकेट — कस्टम प्रकार जाँचक
प्रकार प्रेडिकेट फ़ंक्शन कॉल करने वाले के लिए प्रकार को संकीर्ण करता है। रिटर्न प्रकार के रूप में param is Type का उपयोग करें।
function isUser(value: unknown): value is User {
return (
typeof value === 'object' &&
value !== null &&
'name' in value &&
typeof (value as User).name === 'string'
);
}
const data: unknown = await fetchJson('/api/me');
if (isUser(data)) {
console.log(data.name); // typed as User
}अभिकथन फ़ंक्शन
यदि शर्त विफल होती है, तो अभिकथन फ़ंक्शन त्रुटि उत्पन्न करता है और कॉल के बाद प्रकार को संकीर्ण कर देता है।
function assertIsString(val: unknown): asserts val is string {
if (typeof val !== 'string') throw new Error('Expected string');
}
const val: unknown = getInput();
assertIsString(val);
console.log(val.toUpperCase()); // val is string hereपूर्णता जाँच
जब किसी विभेदित यूनियन पर किए गए switch में डिफ़ॉल्ट शाखा में never प्रकार बचा रहता है, तो TypeScript सुनिश्चित करता है कि सभी मामलों को संभाला गया है। नया वैरिएंट जोड़े जाने पर संकलन त्रुटि पाने के लिए never को असाइन करने वाला डिफ़ॉल्ट जोड़ें।
function render(state: State): string {
switch (state.status) {
case 'loading': return '...';
case 'success': return state.data.length.toString();
case 'error': return state.message;
default:
const _exhaustive: never = state;
throw new Error('Unhandled state: ' + _exhaustive);
}
}Array.isArray द्वारा संकीर्णन
Array.isArray() किसी मान को सरणी प्रकार तक संकीर्ण करता है।
function processInput(input: string | string[]) {
if (Array.isArray(input)) {
return input.join(', '); // string[]
}
return input.toUpperCase(); // string
}त्वरित जाँच
यूनियन प्रकार के वैरिएंट्स में अंतर करने के लिए साझा लिटरल प्रॉपर्टी का उपयोग कौन-सी संकीर्णन तकनीक करती है?
पुनरावलोकन: TypeScript संकीर्णन
आदिम प्रकारों के लिए typeof। वर्गों के लिए instanceof। ऑब्जेक्ट की संरचनाओं के लिए in ऑपरेटर। सत्यता-जाँच null/undefined को फ़िल्टर करती है। साझा लिटरल प्रॉपर्टी वाले विभेदित यूनियन सभी मामलों वाले switch कथन सक्षम करते हैं। जटिल रनटाइम जाँचों के लिए कस्टम प्रकार प्रेडिकेट (is)। डिफ़ॉल्ट में never के साथ पूर्णता जाँच।
एआई शिक्षक के साथ HTML सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 41
- पाठ
- 163
अक्सर पूछे जाने वाले प्रश्न
क्या “Narrowing: typeof, instanceof, discriminated unions” पाठ निःशुल्क है?
हाँ—“Narrowing: typeof, instanceof, discriminated unions” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Frontend Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Frontend Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Narrowing: typeof, instanceof, discriminated unions” में मैं क्या सीखूँगा?
typeof, instanceof और discriminated union patterns से runtime पर union types को narrow करने के लिए type guards का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Frontend Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Frontend Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Frontend Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Narrowing: typeof, instanceof, discriminated unions” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Frontend Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Frontend Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Generics: T extends और constraints
- Utility Types: Partial, Required, Pick, Omit
- Mapped Types और Conditional Types
- Narrowing: typeof, instanceof, discriminated unions