Zod का परिचय: TypeScript के साथ डेटा वैलिडेशन

टाइपिंग के साहसी यात्री, स्वागत है! 🎩 TypeScript वाकई में शानदार है, है ना? यह स्थैतिक टाइपिंग लाकर हमारे कोड को बेहतर ढंग से संरचित करने में मदद करता है और परेशान करने वाली बग्स से बचाता है। लेकिन एक समस्या है: TypeScript टाइप्स को केवल कम्पाइल टाइम पर चेक करता है! 😬 हाँ, एक बार जब आपका कोड चल रहा होता है, तो बाहर से आने वाला डेटा (API, उपयोगकर्ता, आदि) अपेक्षित संरचना का पालन करेगा, इसकी कोई गारंटी नहीं होती। यहीं पर Zod हमारी मदद के लिए आता है! 🚀

इस लेख में, हम जानेंगे कि Zod क्यों और कैसे इस्तेमाल करें, जो एक ऐसी लाइब्रेरी है जो आपको गतिशील रूप से डेटा को वैलिडेट और टाइप करने की अनुमति देती है। बेसिक वैलिडेशन से लेकर जटिल डेटा स्ट्रक्चर्स तक, Zod आपको TypeScript में अपने डेटा को बिना किसी समझौते के सुरक्षित करने का मौका देता है। चलिए शुरू करते हैं! 🎉

Zod क्या है? 🤔

Zod एक TypeScript स्कीमा वैलिडेशन लाइब्रेरी है, जो आपके डेटा को रीयल टाइम में चेक करती है। Zod के साथ, आप किसी भी प्रकार की ऑब्जेक्ट के लिए वैलिडेशन स्कीमा बना सकते हैं। कल्पना कीजिए एक API जो अनिश्चित डेटा भेजती है: Zod तुरंत चेक कर सकता है कि प्राप्त डेटा अपेक्षित टाइप से मेल खाता है या नहीं।

Zod की कुछ प्रमुख विशेषताएं 💪

  • सरल और लचीला: इसकी सिंटैक्स सहज और एक्सप्रेसिव है।
  • वैलिडेशन और टाइपिंग एक साथ: अलग-अलग टाइप्स और वैलिडेशन के बीच जगलिंग करने की जरूरत नहीं, Zod सब संभालता है!
  • तत्काल फीडबैक: जब आपका डेटा स्कीमा से मेल नहीं खाता, तो आपको विस्तृत त्रुटियां मिलती हैं।
  • मजबूत API: सरल वैलिडेशन से लेकर जटिल ट्रांसफॉर्मेशन तक, Zod एक पूर्ण API प्रदान करता है।

Zod की इंस्टॉलेशन 📦

शुरू करने के लिए, बस Zod को npm या yarn के माध्यम से इंस्टॉल करें:

bash
1npm install zod
2# या
3yarn add zod
4# या
5pnpm add zod
6# या
7bun add zod

अब जब आप तैयार हैं, तो आइए अपना पहला Zod स्कीमा बनाएं!

Zod के साथ बेसिक स्कीमा बनाना 🎨

एक Zod स्कीमा अपेक्षित डेटा स्ट्रक्चर का प्रतिनिधित्व करता है। एक सरल उदाहरण लेते हैं जहां हम एक उपयोगकर्ता को नाम, उम्र और ईमेल पते के साथ वैलिडेट करना चाहते हैं।

उदाहरण: बेसिक वैलिडेशन

यहाँ एक उपयोगकर्ता के लिए Zod स्कीमा कैसे परिभाषित करें 👤:

typescript
1import { z } from 'zod';
2
3// उपयोगकर्ता स्कीमा
4const userSchema = z.object({
5 name: z.string(), // नाम एक स्ट्रिंग होना चाहिए
6 age: z.number().int().min(18), // उम्र एक पूर्णांक होनी चाहिए, न्यूनतम 18
7 email: z.string().email(), // एक वैध ईमेल होना चाहिए
8});
9
10// इनपुट डेटा का उदाहरण
11const userInput = {
12 name: 'Alice',
13 age: 25,
14 email: 'alice@example.com',
15};
16
17// डेटा वैलिडेशन
18try {
19 const validUser = userSchema.parse(userInput); // parse वैलिडेटेड डेटा वापस करता है
20 console.log('वैध उपयोगकर्ता:', validUser);
21} catch (e) {
22 console.error('वैलिडेशन त्रुटि:', e.errors);
23}

इस उदाहरण में, Zod चेक करेगा कि userInput userSchema द्वारा परिभाषित स्कीमा का पालन करता है या नहीं। यदि सब कुछ ठीक है, तो parse वैलिडेटेड डेटा वापस करता है। अन्यथा, यह एक विस्तृत संदेश के साथ त्रुटि उठाता है कि क्या गलत है। प्रोडक्शन में कोई आश्चर्य नहीं! 🎉

कंडीशनल और यूनियन टाइप्स: मल्टीपल केस मैनेजमेंट 🔀

Zod कंडीशनल टाइप्स के माध्यम से जटिल स्कीमा को भी संभालता है। मान लीजिए आपके पास एक फॉर्म है जहां उपयोगकर्ता या तो क्लाइंट या एडमिनिस्ट्रेटर हो सकता है। यहाँ Zod के साथ इस स्कीमा को कैसे परिभाषित करें।

उदाहरण: यूनियन के साथ स्कीमा

typescript
1// क्लाइंट स्कीमा
2const clientSchema = z.object({
3 role: z.literal('client'),
4 preferences: z.array(z.string()), // प्राथमिकताओं की एरे
5});
6
7// एडमिनिस्ट्रेटर स्कीमा
8const adminSchema = z.object({
9 role: z.literal('admin'),
10 accessLevel: z.number().min(1).max(5), // एक्सेस लेवल 1 से 5
11});
12
13// दोनों स्कीमा का यूनियन
14const userSchema = z.union([clientSchema, adminSchema]);
15
16// उपयोगकर्ता का उदाहरण
17const adminUser = {
18 role: 'admin',
19 accessLevel: 3,
20};
21
22// वैलिडेशन
23try {
24 const validUser = userSchema.parse(adminUser);
25 console.log('वैध उपयोगकर्ता:', validUser);
26} catch (e) {
27 console.error('वैलिडेशन त्रुटि:', e.errors);
28}

इस उदाहरण में, Zod वैलिडेट करता है कि adminUser या तो client है या admin है, प्रत्येक भूमिका के लिए आवश्यक गुणों के साथ। काफी उपयोगी है, है ना? 👌

ट्रांसफॉर्मेशन: एक साथ वैलिडेट और ट्रांसफॉर्म करना 🔄

कभी-कभी, आप डेटा को वैलिडेट करने के साथ-साथ उसे ट्रांसफॉर्म भी करना चाहते हैं। Zod इसे आसानी से करने की अनुमति देता है, जैसे स्ट्रिंग को नंबर में बदलना।

उदाहरण: डेटा ट्रांसफॉर्मेशन

typescript
1const priceSchema = z.string().transform((val) => parseFloat(val));
2
3// इनपुट का उदाहरण
4const priceInput = '49.99';
5
6// वैलिडेशन और ट्रांसफॉर्मेशन
7const validPrice = priceSchema.parse(priceInput);
8console.log('वैलिडेटेड और ट्रांसफॉर्म्ड कीमत:', validPrice); // 49.99 (नंबर)

यहाँ, Zod एक स्ट्रिंग ("49.99") स्वीकार करता है और उसे एक वैध नंबर में बदल देता है।

कस्टम वैलिडेशन 🛠️

Zod .refine() मेथड के साथ कस्टम वैलिडेशन बनाने की भी अनुमति देता है। मान लीजिए आप विशिष्ट मानदंडों के साथ एक पासवर्ड को वैलिडेट करना चाहते हैं, जैसे न्यूनतम लंबाई और विशेष वर्णों की उपस्थिति।

उदाहरण: पासवर्ड वैलिडेशन

typescript
1const passwordSchema = z
2 .string()
3 .min(8, { message: 'पासवर्ड कम से कम 8 अक्षर का होना चाहिए' })
4 .refine((val) => /[A-Z]/.test(val), {
5 message: 'पासवर्ड में कम से कम एक अपरकेस अक्षर होना चाहिए',
6 })
7 .refine((val) => /[0-9]/.test(val), {
8 message: 'पासवर्ड में कम से कम एक अंक होना चाहिए',
9 });
10
11// इनपुट का उदाहरण
12const passwordInput = 'Secure123';
13
14// वैलिडेशन
15try {
16 const validPassword = passwordSchema.parse(passwordInput);
17 console.log('वैध पासवर्ड:', validPassword);
18} catch (e) {
19 console.error('वैलिडेशन त्रुटि:', e.errors);
20}

.refine() मेथड एक कस्टम कंडीशन जोड़ने की अनुमति देता है। यहाँ, Zod चेक करता है कि पासवर्ड निर्धारित मानदंडों का पालन करता है या नहीं, और यदि ऐसा नहीं है तो विशिष्ट त्रुटि संदेश प्रदान करता है।

Zod को क्यों चुनें? 🌟

Zod TypeScript में वैलिडेशन के लिए एक आवश्यक टूल बन गया है, क्योंकि यह:

  • जटिलता जोड़े बिना वैलिडेशन और टाइपिंग को पूरी तरह से जोड़ता है।
  • जटिल स्कीमा के लिए भी एक स्पष्ट और सहज API प्रदान करता है।
  • समझने में आसान और डीबग करने में सरल त्रुटियां प्रदान करता है।
  • TypeScript प्रोजेक्ट्स में पूरी तरह से एकीकृत होता है।

सारांश

Zod TypeScript को डायनामिक रूप से डेटा को वैलिडेट करके एक अतिरिक्त सुरक्षा और विश्वसनीयता परत प्रदान करता है। आप चैन की नींद सो सकते हैं यह जानकर कि आपका डे

इस लेख को साझा करें


Sébastien Timoner

Sébastien TIMONER

लीड डेवलपर
कस्टम डेवलपमेंट विशेषज्ञ
Aix-en-Provence, France

वेब विकास और तकनीकी टीम प्रबंधन में विशेषज्ञ, मैं प्रभावी डिजिटल समाधानों के निर्माण और अनुकूलन में विशेषज्ञता रखता हूं। React.js, Node.js, TypeScript और Symfony जैसी आधुनिक तकनीकों की गहरी समझ के साथ, मैं offroadLabs में विभिन्न क्षेत्रों की कंपनियों के लिए जटिल SaaS परियोजनाओं की सफलता सुनिश्चित करता हूं, डिजाइन से लेकर प्रोडक्शन तक।

offroadLabs में, मैं तकनीकी विशेषज्ञता और सहयोगात्मक दृष्टिकोण को जोड़ते हुए कस्टम विकास सेवाएं प्रदान करता हूं। चाहे एक नवीन SaaS समाधान बनाना हो, मौजूदा एप्लिकेशन को आधुनिक बनाना हो, या एक टीम के कौशल विकास में सहायता करना हो, मैं प्रत्येक परियोजना की विशिष्ट आवश्यकताओं के अनुरूप मजबूत और प्रभावी समाधान प्रदान करने के लिए प्रतिबद्ध हूं।

मैं ऐक्स-एन-प्रोवेंस के आसपास या पूर्ण रिमोट असाइनमेंट के लिए उपलब्ध हूं।