ArkType TypeScript: पूर्ण गाइड उदाहरणों के साथ

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

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

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

ArkType TypeScript: पूर्ण गाइड

1. ArkType क्या है और इसकी आवश्यकता क्यों है?

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

ArkType की आवश्यकता क्यों है? आधुनिक वेब एप्लिकेशन में डेटा अक्सर बाहरी स्रोतों से आता है: API, फॉर्म, localStorage, WebSocket। वैलिडेशन के बिना, आपको रनटाइम एरर मिलने का जोखिम रहता है जिन्हें पकड़ना मुश्किल होता है। ArkType इस समस्या को हल करता है, डेटा स्कीमा का वर्णन करने का एक डिक्लेरेटिव तरीका प्रदान करता है और इन स्कीमा से स्वचालित रूप से TypeScript टाइप जनरेट करता है। यह लाइब्रेरी REST API, GraphQL, फॉर्म और किसी भी बाहरी डेटा के साथ काम करते समय विशेष रूप से उपयोगी है।

ArkType का मुख्य लाभ गति है। स्कीमा के स्टैटिक कंपाइलेशन के कारण, वैलिडेशन समान लाइब्रेरीज़ की तुलना में 10-100 गुना तेज होता है। इसके अलावा, ArkType रिकर्सिव टाइप, साइक्लिक रेफरेंस, सख्त जांच और कई बिल्ट-इन टाइप को सपोर्ट करता है। यह इसे हाई-लोड एप्लिकेशन और माइक्रोसर्विसेज के लिए एक आदर्श विकल्प बनाता है।

2. इंस्टॉलेशन

ArkType को इंस्टॉल करने के लिए npm (या yarn/pnpm) पैकेज मैनेजर का उपयोग करें। यह लाइब्रेरी TypeScript में लिखी गई है और पूर्ण टाइप सपोर्ट के साथ आती है।

npm install arktype

TypeScript के साथ काम करने के लिए किसी अतिरिक्त सेटिंग की आवश्यकता नहीं है - लाइब्रेरी स्वचालित रूप से tsconfig.json कॉन्फ़िगरेशन को पहचान लेती है। न्यूनतम TypeScript वर्जन 5.0 है।

# अगर आप yarn का उपयोग करते हैं
yarn add arktype

# अगर आप pnpm का उपयोग करते हैं
pnpm add arktype

3. त्वरित शुरुआत

ArkType का न्यूनतम उपयोग उदाहरण - एक यूज़र ऑब्जेक्ट को वैलिडेट करने के लिए स्कीमा बनाना:

import { type } from 'arktype';

// स्कीमा परिभाषित करें
const User = type({
    name: 'string',
    age: 'number',
    email: 'string.email'
});

// डेटा वैलिडेट करें
const result = User({
    name: 'राहुल',
    age: 25,
    email: 'rahul@example.com'
});

if (result instanceof type.errors) {
    console.error('वैलिडेशन एरर:', result.summary);
} else {
    console.log('डेटा वैलिड है:', result);
    // result का टाइप स्वचालित रूप से { name: string; age: number; email: string } होगा
}

इस उदाहरण में, हमने एक User स्कीमा बनाई है जो तीन फील्ड की जांच करती है। अगर डेटा वैलिडेशन पास नहीं करता है, तो विस्तृत विवरण के साथ एक एरर ऑब्जेक्ट लौटाया जाता है। अगर सब कुछ ठीक है, तो टाइप किया गया डेटा लौटाया जाता है।

4. मुख्य तरीके और फंक्शन

ArkType स्कीमा बनाने, उन्हें संयोजित करने और रूपांतरित करने के लिए एक समृद्ध API प्रदान करता है। आइए 8 प्रमुख तरीकों को देखें।

4.1. type() — स्कीमा बनाना

सिग्नेचर: type(schema: TypeSchema): Type

विवरण: वैलिडेशन स्कीमा बनाने की मुख्य विधि। यह एक ऑब्जेक्ट या टाइप डेफिनिशन वाली स्ट्रिंग लेता है।

import { type } from 'arktype';

// सरल स्कीमा
const StringType = type('string');
const NumberType = type('number');

// ऑब्जेक्ट स्कीमा
const Person = type({
    name: 'string',
    age: 'number',
    isActive: 'boolean'
});

// वैलिडेशन
console.log(StringType('नमस्ते')); // 'नमस्ते'
console.log(StringType(123)); // एरर: Expected string, got number

4.2. .array() — एलिमेंट्स की ऐरे

सिग्नेचर: type.array(): Type

विवरण: किसी विशिष्ट प्रकार के एलिमेंट्स की ऐरे के लिए स्कीमा बनाता है।

import { type } from 'arktype';

// नंबर की ऐरे के लिए स्कीमा
const NumberArray = type('number').array();

// वैलिडेशन
console.log(NumberArray([1, 2, 3])); // [1, 2, 3]
console.log(NumberArray([1, 'दो', 3])); // एरर: Expected number, got string

4.3. .or() — यूनियन टाइप

सिग्नेचर: type.or(...types: Type[]): Type

विवरण: कई प्रकारों में से किसी एक को स्वीकार करने वाली स्कीमा बनाता है।

import { type } from 'arktype';

// स्ट्रिंग या नंबर स्वीकार करने वाली स्कीमा
const StringOrNumber = type('string').or(type('number'));

// वैलिडेशन
console.log(StringOrNumber('हैलो')); // 'हैलो'
console.log(StringOrNumber(42)); // 42
console.log(StringOrNumber(true)); // एरर: Expected string | number, got boolean

4.4. .and() — इंटरसेक्शन टाइप

सिग्नेचर: type.and(...types: Type[]): Type

विवरण: सभी निर्दिष्ट प्रकारों को एक साथ संतुष्ट करने वाली स्कीमा बनाता है।

import { type } from 'arktype';

// बेस यूज़र स्कीमा
const BaseUser = type({
    id: 'number',
    name: 'string'
});

// एडमिन स्कीमा जिसमें अतिरिक्त फील्ड हैं
const Admin = BaseUser.and(type({
    role: "'admin'",
    permissions: 'string[]'
}));

// वैलिडेशन
const adminData = Admin({
    id: 1,
    name: 'राहुल',
    role: 'admin',
    permissions: ['read', 'write']
});
console.log(adminData); // सफल

4.5. .pick() — फील्ड चुनना

सिग्नेचर: type.pick(...keys: string[]): Type

विवरण: मौजूदा ऑब्जेक्ट स्कीमा से केवल निर्दिष्ट फील्ड वाली नई स्कीमा बनाता है।

import { type } from 'arktype';

const User = type({
    id: 'number',
    name: 'string',
    email: 'string.email',
    password: 'string'
});

// केवल सार्वजनिक फील्ड चुनें
const PublicUser = User.pick('id', 'name', 'email');

// वैलिडेशन
console.log(PublicUser({
    id: 1,
    name: 'राहुल',
    email: 'rahul@example.com'
})); // सफल

4.6. .omit() — फील्ड हटाना

सिग्नेचर: type.omit(...keys: string[]): Type

विवरण: मौजूदा ऑब्जेक्ट स्कीमा से निर्दिष्ट फील्ड हटाकर नई स्कीमा बनाता है।

import { type } from 'arktype';

const User = type({
    id: 'number',
    name: 'string',
    email: 'string.email',
    password: 'string'
});

// पासवर्ड फील्ड हटाएं
const SafeUser = User.omit('password');

// वैलिडेशन
console.log(SafeUser({
    id: 1,
    name: 'राहुल',
    email: 'rahul@example.com'
})); // सफल

4.7. .partial() — वैकल्पिक फील्ड

सिग्नेचर: type.partial(): Type

विवरण: सभी फील्ड को वैकल्पिक बनाता है, जो आंशिक अपडेट के लिए उपयोगी है।

import { type } from 'arktype';

const User = type({
    name: 'string',
    age: 'number',
    email: 'string.email'
});

// आंशिक अपडेट के लिए स्कीमा
const PartialUser = User.partial();

// वैलिडेशन - केवल कुछ फील्ड प्रदान करें
console.log(PartialUser({ name: 'राहुल' })); // सफल
console.log(PartialUser({ age: 25 })); // सफल
console.log(PartialUser({})); // सफल (खाली ऑब्जेक्ट भी मान्य है)

4.8. .strict() — सख्त वैलिडेशन

सिग्नेचर: type.strict(): Type

विवरण: सख्त मोड सक्षम करता है जहां अतिरिक्त फील्ड की अनुमति नहीं है।

import { type } from 'arktype';

const User = type({
    name: 'string',
    age: 'number'
}).strict();

// वैलिडेशन
console.log(User({ name: 'राहुल', age: 25 })); // सफल
console.log(User({ name: 'राहुल', age: 25, extra: 'डेटा' })); // एरर: Unexpected key 'extra'

अनुशंसाएँ