io-ts क्या है और इसकी आवश्यकता क्यों है?
io-ts TypeScript के लिए एक लाइब्रेरी है जो इस भाषा में डेवलपमेंट की सबसे बड़ी समस्याओं में से एक को हल करती है: स्टैटिक टाइप्स (कंपाइल-टाइम पर) और वास्तविक डेटा (रनटाइम पर) के बीच का अंतर। TypeScript एक शानदार टूल है, लेकिन इसकी टाइप सिस्टम केवल डेवलपमेंट के दौरान काम करती है। जब आपका एप्लिकेशन चलता है, तो सभी टाइप्स मिट जाते हैं। यदि आप किसी बाहरी API, वेबसाइट फॉर्म, localStorage या किसी अन्य स्रोत से डेटा प्राप्त करते हैं जो आपके कंपाइलर के नियंत्रण में नहीं है, तो आप यह सुनिश्चित नहीं कर सकते कि डेटा बताए गए टाइप्स से मेल खाता है।
यहाँ रनटाइम वैलिडेशन काम आता है। io-ts आपको एक बार डेटा स्कीमा परिभाषित करने की अनुमति देता है, और फिर इसका उपयोग दो उद्देश्यों के लिए करता है:
- स्टैटिक टाइपिंग (कंपाइल-टाइम): TypeScript आपकी स्कीमा के आधार पर टाइप्स निकालता है, जिससे कोड लिखते समय सुरक्षा सुनिश्चित होती है।
- रनटाइम वैलिडेशन: io-ts जाँचता है कि वास्तविक डेटा आपकी स्कीमा से मेल खाता है या नहीं, और या तो सफल परिणाम या विस्तृत त्रुटि लौटाता है।
यह लाइब्रेरी कोडेक्स (codecs) की अवधारणा पर आधारित है। कोडेक एक ऑब्जेक्ट है जो जानता है कि कच्चे डेटा को TypeScript टाइप में कैसे डिकोड (जाँच और रूपांतरित) करना है और इस टाइप को वापस कैसे एनकोड (सीरियलाइज़) करना है। यह io-ts को न केवल वैलिडेशन के लिए, बल्कि सुरक्षित डेटा सीरियलाइज़ेशन/डीसीरियलाइज़ेशन के लिए भी एक शक्तिशाली उपकरण बनाता है।
इंस्टॉलेशन
io-ts Node.js और ब्राउज़र इकोसिस्टम के लिए एक लाइब्रेरी है, इसलिए इसे npm (या yarn) के माध्यम से इंस्टॉल किया जाता है। ध्यान दें कि io-ts को fp-ts को peer dependency के रूप में आवश्यकता है, क्योंकि यह Either और Option जैसी फंक्शनल अवधारणाओं का उपयोग करता है।
npm install io-ts fp-ts
या, यदि आप yarn का उपयोग कर रहे हैं:
yarn add io-ts fp-ts
इंस्टॉलेशन के बाद, आप अपने प्रोजेक्ट में लाइब्रेरी को इम्पोर्ट कर सकते हैं:
import * as t from 'io-ts';
import { isRight, isLeft } from 'fp-ts/Either';
त्वरित शुरुआत: पहला उदाहरण
आइए एक सरल उदाहरण से शुरू करते हैं। मान लीजिए हम एक यूज़र ऑब्जेक्ट की उम्मीद कर रहे हैं जिसमें name (स्ट्रिंग) और age (नंबर) फील्ड हों। io-ts के साथ एक स्कीमा परिभाषित करें और कुछ डेटा को वैलिडेट करने का प्रयास करें।
import * as t from 'io-ts';
import { isRight, isLeft } from 'fp-ts/Either';
// 1. स्कीमा (कोडेक) परिभाषित करें
const User = t.type({
name: t.string,
age: t.number,
});
// 2. सुरक्षित टाइप प्राप्त करने के लिए फंक्शन
type User = t.TypeOf<typeof User>;
// 3. जाँच के लिए डेटा
const validData = { name: 'Alice', age: 30 };
const invalidData = { name: 'Bob', age: 'बीस' }; // age - स्ट्रिंग, नंबर नहीं
// 4. वैलिडेशन
const result1 = User.decode(validData);
const result2 = User.decode(invalidData);
console.log(isRight(result1)); // true
console.log(isLeft(result2)); // true
// 5. डेटा निकालें (यदि वैलिडेशन सफल हो)
if (isRight(result1)) {
const user: User = result1.right;
console.log(user.name); // Alice
}
// 6. त्रुटि को संभालें
if (isLeft(result2)) {
console.error('वैलिडेशन त्रुटि:', result2.left);
// त्रुटियों की सूची दिखाएगा, उदाहरण के लिए:
// [ { value: 'बीस', context: [...], message: 'Invalid value "बीस" supplied to : { name: string, age: number }/age: number' } ]
}
इस उदाहरण में, हम एक मुख्य पैटर्न देखते हैं: decode fp-ts लाइब्रेरी से Either<Errors, A> लौटाता है। Either एक कंटेनर है जिसमें या तो त्रुटि (बायाँ टाइप) या सफल मान (दायाँ टाइप) हो सकता है। हम isRight और isLeft फंक्शन का उपयोग करके परिणाम की जाँच करते हैं।
io-ts के मुख्य तरीके और फंक्शन
io-ts जटिल स्कीमा बनाने के लिए प्रिमिटिव और कॉम्बिनेटर का एक समृद्ध सेट प्रदान करता है। नीचे प