TypeScript में डेटा सत्यापन: Zod, Yup और io-ts लाइब्रेरीज़ का अवलोकन
TypeScript एक स्थिर रूप से टाइप की गई भाषा है जो संकलन चरण (compile time) पर प्रकारों की जाँच करती है। हालाँकि, रनटाइम (runtime) में TypeScript कोई जाँच नहीं करता है। इसका मतलब है कि बाहरी स्रोतों — API अनुरोधों, इनपुट फॉर्म, कॉन्फ़िगरेशन फ़ाइलों — से प्राप्त डेटा अपेक्षित प्रकारों से मेल नहीं खा सकता है। इस समस्या को हल करने के लिए डेटा सत्यापन लाइब्रेरीज़ का उपयोग किया जाता है, जो रनटाइम में डेटा की संरचना और प्रकारों की जाँच करती हैं।
इस लेख में, हम TypeScript में डेटा सत्यापन के लिए तीन लोकप्रिय लाइब्रेरीज़ पर चर्चा करेंगे: Zod, Yup और io-ts। आप जानेंगे कि वे कैसे काम करती हैं, उनमें क्या अंतर हैं और अपने प्रोजेक्ट के लिए सही लाइब्रेरी कैसे चुनें।
TypeScript में डेटा सत्यापन की आवश्यकता क्यों है?
कल्पना करें कि आप एक ऐसा एप्लिकेशन लिख रहे हैं जो फॉर्म के माध्यम से उपयोगकर्ता से डेटा प्राप्त करता है:
interface UserInput { name: string; age: number; email: string;}
function processUserInput(input: UserInput) { console.log(input.name.toUpperCase());}TypeScript में यह कोड संकलित हो जाएगा, भले ही रनटाइम में input.name undefined या एक संख्या हो। इससे एक त्रुटि उत्पन्न होगी जिसे पकड़ना मुश्किल है। सत्यापन लाइब्रेरीज़ यह सुनिश्चित करने में मदद करती हैं कि डेटा अपेक्षित स्कीमा से मेल खाता है, और स्पष्ट त्रुटि संदेश प्रदान करती हैं।
Zod — आधुनिक और तेज़ लाइब्रेरी
Zod घोषणात्मक सत्यापन और प्रकार निष्कर्षण (type inference) के लिए एक लाइब्रेरी है। इसे विशेष रूप से TypeScript के लिए बनाया गया है और यह एक संक्षिप्त API प्रदान करती है।
स्थापना:
npm install zodउपयोग का उदाहरण:
import { z } from 'zod';
// सत्यापन स्कीमा परिभाषित करेंconst UserSchema = z.object({ name: z.string().min(2, "नाम में कम से कम 2 अक्षर होने चाहिए"), age: z.number().int().positive("आयु एक सकारात्मक संख्या होनी चाहिए"), email: z.string().email("अमान्य ईमेल"),});
// स्कीमा के आधार पर प्रकार निकालेंtype User = z.infer<typeof UserSchema>;
// डेटा सत्यापनconst result = UserSchema.safeParse({ name: "अन्ना", age: 25, email: "anna@example.com",});
if (result.success) { // result.data का प्रकार User है console.log(result.data.name);} else { // result.error में त्रुटियों के बारे में विस्तृत जानकारी है console.error(result.error.format());}Zod जटिल संरचनाओं का समर्थन करता है: नेस्टेड ऑब्जेक्ट, ऐरे, यूनियन, डिस्क्रिमिनेटेड यूनियन। यह डेटा को रूपांतरित (transform) भी कर सकता है (उदाहरण के लिए, स्ट्रिंग को संख्या में बदलना)।
Yup — React इकोसिस्टम की लोकप्रिय लाइब्रेरी
Yup स्कीमा सत्यापन के लिए एक लाइब्रेरी है, जिसका व्यापक रूप से React एप्लिकेशन में Formik के साथ उपयोग किया जाता है। इसका API Zod के समान है, लेकिन यह पहले आई थी।
स्थापना:
npm install yupउपयोग का उदाहरण:
import * as yup from 'yup';
// स्कीमा परिभाषित करेंconst userSchema = yup.object({ name: yup.string().min(2, "नाम में कम से कम 2 अक्षर होने चाहिए").required(), age: yup.number().integer().positive().required(), email: yup.string().email("अमान्य ईमेल").required(),});
// validate विधि से सत्यापनuserSchema.validate({ name: "इवान", age: 30, email: "ivan@example.com",}).then(validData => console.log(validData)).catch(err => console.error(err.errors));Yup फॉर्म सत्यापन के लिए सुविधाजनक विधियाँ प्रदान करता है, कस्टम त्रुटि संदेशों और सशर्त नियमों (when) का समर्थन करता है। हालाँकि, यह Zod की तुलना में TypeScript के साथ कम निकटता से एकीकृत है — प्रकार निष्कर्षण के लिए अतिरिक्त कदम उठाने पड़ते हैं।
io-ts — सत्यापन के लिए कार्यात्मक दृष्टिकोण
io-ts एक लाइब्रेरी है जो कार्यात्मक प्रोग्रामिंग पर आधारित है। यह डेटा को एन्कोड और डिकोड करने के लिए कोडेक्स (codecs) की अवधारणा का उपयोग करती है।