TypeScript में त्रुटि प्रबंधन: try/catch, कस्टम क्लासेस और सख्त टाइपिंग

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

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

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

परिचय: TypeScript में त्रुटि प्रबंधन केवल try/catch क्यों नहीं है

TypeScript JavaScript में स्थैतिक टाइपिंग जोड़ता है, लेकिन रनटाइम त्रुटियाँ (runtime errors) किसी भी एप्लिकेशन का हिस्सा बनी रहती हैं। शुद्ध JS के विपरीत, जहाँ catch(e) any लौटाता है, TypeScript अधिक सख्त तंत्र प्रदान करता है। सही त्रुटि प्रबंधन न केवल क्रैश को रोकना है, बल्कि डिबगिंग और कोड रखरखाव के लिए एक स्पष्ट प्रणाली बनाना भी है। इस लेख में हम सभी पहलुओं पर चर्चा करेंगे: बुनियादी try/catch से लेकर पूर्ण टाइपिंग के साथ कस्टम त्रुटि पदानुक्रम बनाने तक।



1. try/catch का मूल सिंटैक्स और unknown प्रकार की समस्या

क्लासिकल संरचना

TypeScript में मूल संरचना JavaScript के समान दिखती है:

try {    // कोड जो अपवाद फेंक सकता है    const data = JSON.parse('{"name": "TypeScript"}');    console.log(data.name);} catch (error) {    // त्रुटि प्रबंधन    console.error('एक त्रुटि हुई:', error);}

हालाँकि, एक महत्वपूर्ण अंतर है: TypeScript में catch ब्लॉक में वेरिएबल error का प्रकार unknown होता है (JavaScript में any के विपरीत, जब तक अन्यथा निर्दिष्ट न हो)। यह प्रकार सुरक्षा के लिए किया गया है।



unknown की समस्या और इसे कैसे हल करें

प्रकार unknown का अर्थ है कि हम त्रुटि के गुणों तक सीधे नहीं पहुँच सकते, उदाहरण के लिए, error.message। कंपाइलर एक त्रुटि देगा:

catch (error) {    // त्रुटि TS2571: ऑब्जेक्ट 'unknown' प्रकार का है।    console.log(error.message); // ❌ संकलित नहीं होगा}

गुणों तक पहुँचने के लिए, प्रकार को संकीर्ण करना होगा:

catch (error) {    if (error instanceof Error) {        console.log(error.message); // ✅ काम करता है    } else {        console.log('अज्ञात त्रुटि:', error);    }}

या गुण की उपस्थिति की जाँच का उपयोग करें:

catch (error) {    if (error && typeof error === 'object' && 'message' in error) {        console.log((error as { message: string }).message);    }}


2. टाइपिंग के साथ कस्टम त्रुटि क्लासेस बनाना

यह क्यों महत्वपूर्ण है?

मानक Error में केवल name, message और stack होते हैं। वास्तविक प्रोजेक्ट्स में अक्सर अतिरिक्त फ़ील्ड की आवश्यकता होती है: त्रुटि कोड, HTTP स्थिति, लॉगिंग के लिए डेटा। TypeScript प्रकारों के पूर्ण समर्थन के साथ त्रुटि क्लासेस का पदानुक्रम बनाने की अनुमति देता है।



कस्टम क्लास का उदाहरण

// सभी एप्लिकेशन त्रुटियों के लिए बेस क्लासclass AppError extends Error {    public readonly statusCode: number;    public readonly isOperational: boolean;

constructor(message: string, statusCode: number = 500, isOperational: boolean = true) { super(message); this.name = 'AppError'; this.statusCode = statusCode; this.isOperational = isOperational; // प्रोटोटाइप पुनर्स्थापित करें (TypeScript के लिए आवश्यक) Object.setPrototypeOf(this, new.target.prototype); }}

// विशिष्ट त्रुटियाँclass NotFoundError extends AppError { constructor(resource: string) { super(`${resource} नहीं मिला`, 404); this.name = 'NotFoundError'; }}

class ValidationError extends AppError { public readonly errors: string[];

constructor(errors: string[]) { super('सत्यापन त्रुटि', 400); this.name = 'ValidationError'; this.errors = errors; }}


try/catch के साथ उपयोग

function getUser(id: number): User {    if (id <= 0) {        throw new ValidationError(['ID एक धनात्मक संख्या होनी चाहिए']);    }    // ... उपयोगकर्ता प्राप्त करने का तर्क    if (!user) {        throw new NotFoundError('उपयोगकर्ता');    }    return user;}

try { const user = getUser(-1);} catch (error) { if (err

ब्लॉग

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