TypeScript में डेटा वैलिडेशन: उपकरणों और अभ्यासों का अवलोकन
\n\nआधुनिक TypeScript वेब डेवलपमेंट में, डेटा अखंडता सुनिश्चित करना एक प्रमुख कार्य है। TypeScript की सख्त स्थैतिक टाइपिंग के बावजूद, यह गारंटी नहीं दे सकता कि बाहरी दुनिया (API, फॉर्म, localStorage) से आने वाला डेटा अपेक्षित प्रारूप से मेल खाता है। यहाँ रनटाइम-वैलिडेशन काम आता है — प्रोग्राम निष्पादन के दौरान डेटा की जाँच। इस लेख में, हम तीन लोकप्रिय लाइब्रेरीज़: Zod, Yup और Joi पर विचार करेंगे, उनके दृष्टिकोणों की तुलना करेंगे और दिखाएंगे कि TypeScript प्रोजेक्ट में वैलिडेशन को कैसे एकीकृत किया जाए।
\n\nकेवल TypeScript प्रकार पर्याप्त क्यों नहीं हैं?
\nTypeScript संकलन के समय प्रकारों की जाँच करता है, लेकिन रनटाइम में सभी एनोटेशन मिट जाते हैं। इसका मतलब है कि:
\n- \n
- उपयोगकर्ता के डेटा में अतिरिक्त फ़ील्ड हो सकते हैं या आवश्यक फ़ील्ड गायब हो सकते हैं \n
- संख्याएँ स्ट्रिंग के रूप में आ सकती हैं \n
- ऑब्जेक्ट
nullयाundefinedहो सकते हैं \n
वैलिडेशन लाइब्रेरीज़ स्कीमा प्रदान करके इस समस्या का समाधान करती हैं, जो जाँच और प्रकार निष्कर्षण दोनों के रूप में काम करती हैं।
\n\n1. Zod — आधुनिक मानक
\nZod TypeScript में वैलिडेशन के लिए सबसे लोकप्रिय लाइब्रेरी है। इसका मुख्य लाभ स्कीमा से TypeScript प्रकारों का स्वचालित निष्कर्षण है।
\n\nस्थापना
\nnpm install zod\n\nबेसिक स्कीमा उदाहरण
\nimport { z } from 'zod';\n\nconst UserSchema = z.object({\n id: z.number().positive(),\n name: z.string().min(2).max(50),\n email: z.string().email(),\n age: z.number().int().min(18).optional(),\n});\n\n// प्रकार निष्कर्षण: { id: number; name: string; email: string; age?: number }\ntype User = z.infer<typeof UserSchema>;\n\n// वैलिडेशन\nconst result = UserSchema.safeParse(inputData);\nif (!result.success) {\n console.error(result.error.errors);\n} else {\n // result.data — User प्रकार के साथ सही डेटा\n processUser(result.data);\n}\n\nउन्नत सुविधाएँ
\n- \n
- रूपांतरण:
z.string().transform(val => val.trim())\n - विभेदित संघ:
z.discriminatedUnion('type', [...])\n - पुनरावर्ती स्कीमा:
z.lazy(() => NodeSchema)\n - कस्टम त्रुटियाँ:
z.string().refine(val => !val.includes('bad'), 'bad शब्द का उपयोग नहीं कर सकते')\n
2. Yup — समय-परीक्षित उपकरण
\nYup एक समृद्ध इतिहास वाली लाइब्रेरी है, जो मूल रूप से फॉर्म वैलिडेशन के लिए बनाई गई थी। यह Formik और React Hook Form के साथ अच्छी तरह से एकीकृत होती है।
\n\nस्थापना
\nnpm install yup\n\nस्कीमा उदाहरण
\nimport * as yup from 'yup';\n\nconst productSchema = yup.object({\n title: yup.string().required('शीर्षक आवश्यक है').min(3),\n price: yup.number().positive('कीमत सकारात्मक होनी चाहिए').required(),\n inStock: yup.boolean().default(true),\n});\n\ntype Product = yup.InferType<typeof productSchema>;\n\n// वैलिडेशन\nproductSchema.validate(inputData, { abortEarly: false })\n .then(validData => console.log(validData))\n .catch(err => console.error(err.errors));\n\nYup की विशेषताएँ
\n- \n
- सशर्त वैलिडेशन समर्थन:
.when('field', ...)\n - हिंदी में अंतर्निहित त्रुटि संदेश (लोकेल सेट करने पर) \n
- नेस्टेड ऑब्जेक्ट और ऐरे के साथ आसान काम \n
- प्रकार रूपांतरण के लिए
cast()औरtransform()विधियाँ \n
3. Joi — शक्तिशाली, लेकिन अधिक भारी
\nJoi Node.js (Hapi.js) इकोसिस्टम की एक प्रसिद्ध लाइब्रेरी है। यह अधिकतम लचीलापन प्रदान करती है, लेकिन इसमें TypeScript के साथ अंतर्निहित एकीकरण नहीं है (प्रकारों की मैन्युअल परिभाषा की आवश्यकता है)।
\n\nस्थापना
\nnpm install joi @types/joi<