TypeScript में डेटा वैलिडेशन: Zod, Yup और अन्य उपकरण

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

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

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

TypeScript में डेटा वैलिडेशन: उपकरणों और अभ्यासों का अवलोकन

\n\n

आधुनिक TypeScript वेब डेवलपमेंट में, डेटा अखंडता सुनिश्चित करना एक प्रमुख कार्य है। TypeScript की सख्त स्थैतिक टाइपिंग के बावजूद, यह गारंटी नहीं दे सकता कि बाहरी दुनिया (API, फॉर्म, localStorage) से आने वाला डेटा अपेक्षित प्रारूप से मेल खाता है। यहाँ रनटाइम-वैलिडेशन काम आता है — प्रोग्राम निष्पादन के दौरान डेटा की जाँच। इस लेख में, हम तीन लोकप्रिय लाइब्रेरीज़: Zod, Yup और Joi पर विचार करेंगे, उनके दृष्टिकोणों की तुलना करेंगे और दिखाएंगे कि TypeScript प्रोजेक्ट में वैलिडेशन को कैसे एकीकृत किया जाए।

\n\n

केवल TypeScript प्रकार पर्याप्त क्यों नहीं हैं?

\n

TypeScript संकलन के समय प्रकारों की जाँच करता है, लेकिन रनटाइम में सभी एनोटेशन मिट जाते हैं। इसका मतलब है कि:

\n
    \n
  • उपयोगकर्ता के डेटा में अतिरिक्त फ़ील्ड हो सकते हैं या आवश्यक फ़ील्ड गायब हो सकते हैं
  • \n
  • संख्याएँ स्ट्रिंग के रूप में आ सकती हैं
  • \n
  • ऑब्जेक्ट null या undefined हो सकते हैं
  • \n
\n

वैलिडेशन लाइब्रेरीज़ स्कीमा प्रदान करके इस समस्या का समाधान करती हैं, जो जाँच और प्रकार निष्कर्षण दोनों के रूप में काम करती हैं।

\n\n

1. Zod — आधुनिक मानक

\n

Zod TypeScript में वैलिडेशन के लिए सबसे लोकप्रिय लाइब्रेरी है। इसका मुख्य लाभ स्कीमा से TypeScript प्रकारों का स्वचालित निष्कर्षण है।

\n\n

स्थापना

\n
npm install zod
\n\n

बेसिक स्कीमा उदाहरण

\n
import { 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
\n\n

2. Yup — समय-परीक्षित उपकरण

\n

Yup एक समृद्ध इतिहास वाली लाइब्रेरी है, जो मूल रूप से फॉर्म वैलिडेशन के लिए बनाई गई थी। यह Formik और React Hook Form के साथ अच्छी तरह से एकीकृत होती है।

\n\n

स्थापना

\n
npm install yup
\n\n

स्कीमा उदाहरण

\n
import * 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\n

Yup की विशेषताएँ

\n
    \n
  • सशर्त वैलिडेशन समर्थन: .when('field', ...)
  • \n
  • हिंदी में अंतर्निहित त्रुटि संदेश (लोकेल सेट करने पर)
  • \n
  • नेस्टेड ऑब्जेक्ट और ऐरे के साथ आसान काम
  • \n
  • प्रकार रूपांतरण के लिए cast() और transform() विधियाँ
  • \n
\n\n

3. Joi — शक्तिशाली, लेकिन अधिक भारी

\n

Joi Node.js (Hapi.js) इकोसिस्टम की एक प्रसिद्ध लाइब्रेरी है। यह अधिकतम लचीलापन प्रदान करती है, लेकिन इसमें TypeScript के साथ अंतर्निहित एकीकरण नहीं है (प्रकारों की मैन्युअल परिभाषा की आवश्यकता है)।

\n\n

स्थापना

\n
npm install joi @types/joi<                    

अनुशंसाएँ