valdex - इस्तेमाल में आसान TypeScript runtime type assertion लाइब्रेरी
(github.com/asheswook)नमस्ते।
आमतौर पर TypeScript backend विकसित करते समय, आप जानते होंगे कि जिन हिस्सों में सबसे ज़्यादा त्रुटियाँ होती हैं, वे runtime वाले हिस्से होते हैं जिन्हें compile time पर पकड़ा नहीं जा सकता।
उदाहरण के लिए, DB row को parse करने वाली repository implementation या external API communication वाले हिस्सों में ये सबसे अधिक होता है।
DB से प्राप्त मान अपेक्षा से अलग होने पर runtime में undefined inject हो जाना, या casting करते समय बाहर से आए primitive values को सही तरह से न पहचान पाने की वजह से human error होना—ऐसी समस्याएँ आम हैं।
Repository implement करते समय भी बाहर से आने वाले primitive values के type के लिए interface में बहुत सारा type annotation जोड़ना पड़ता है। शायद यह छोटी समस्या लगे, लेकिन इसे अधिक आसानी से इस्तेमाल करने के लिए मैंने यह बनाया।
वास्तव में external API वाले हिस्सों और DB implementation का code कहीं अधिक संक्षिप्त हो गया, और runtime में होने वाली त्रुटियाँ भी कम हुईं।
इसे टीम में backend पर इस्तेमाल किया गया, और ठीक लगा तो npm पर publish कर दिया।
import { validate } from 'valdex';
const data: unknown = await fetchData();
validate(data, {
name: String,
age: Number,
active: Boolean
});
// TypeScript now knows the exact type of data
data.name // string
data.age // number
data.active // boolean
ऊपर का उदाहरण ऐसी स्थिति मानता है जहाँ data बाहर से लाया जा रहा है। चाहे आप axios इस्तेमाल करें, mysql2, या postgres pg, यह लागू किया जा सकता है। unknown type के रूप में आए मान की जाँच की जाती है, और यदि वह सही हो तो बाद के control flow में उस मान को validate() में परिभाषित type के रूप में assert किया जाता है।
बिल्कुल, zod जैसी लाइब्रेरी का उपयोग भी किया जा सकता है।
zod और valdex में अंतर यह है कि valdex schema को instance बनाकर इस्तेमाल नहीं करता, बल्कि data प्राप्त करने वाली जगह के भीतर ही declarative तरीके से data type को संभालने देता है। Interface या DTO class को बदलने के लिए ऊपर-नीचे जाते हुए code संशोधित करने की ज़रूरत नहीं पड़ती।
npm i valdex
इसे npm से install करके इस्तेमाल किया जा सकता है।
2 टिप्पणियां
सिर्फ़ simple types के लिए हो, तो लगता है कि यह काफ़ी बढ़िया DX देगा, वाह
चूंकि यह Nested Object और Array दोनों को सपोर्ट करता है, इसलिए अभी तक external API या repository implementation करते समय कोई खटकने वाली बात नहीं लगी।
रुचि दिखाने के लिए धन्यवाद!