Type-fest क्या है और इसकी ज़रूरत क्यों है?
Type-fest TypeScript के लिए यूटिलिटी टाइप्स का एक कलेक्शन है, जिसे Sindre Sorhus कम्युनिटी ने बनाया है। यह लाइब्रेरी दर्जनों रेडीमेड टाइप्स प्रदान करती है जो TypeScript में डेवलपमेंट के दौरान आने वाली रोज़मर्रा की समस्याओं को हल करती हैं: सरल ट्रांसफॉर्मेशन (जैसे, ऑब्जेक्ट के सभी फील्ड को ऑप्शनल बनाना) से लेकर जटिल कंडीशनल टाइप्स (जैसे, Promise से वैल्यू का टाइप निकालना) तक।
इस लाइब्रेरी की ज़रूरत क्यों है? TypeScript एक शक्तिशाली भाषा है, लेकिन इसके बिल्ट-इन टाइप्स (Partial, Required, Pick, Record) केवल बुनियादी सीनारियो को कवर करते हैं। रियल प्रोजेक्ट्स में अक्सर अधिक विशिष्ट कंस्ट्रक्शन की ज़रूरत होती है: ऑब्जेक्ट्स का डीप मर्ज, JSON के साथ काम करने के लिए टाइप्स, कॉन्सटेंट की सख्त टाइपिंग, जटिल स्ट्रक्चर से टाइप्स निकालना आदि। Type-fest इन टाइप्स को मैन्युअली लिखने की ज़रूरत को खत्म करता है, जिससे समय बचता है और गलतियों की संभावना कम होती है।
यह लाइब्रेरी एक्टिवली मेंटेन की जाती है, GitHub पर इसके 10,000 से अधिक स्टार हैं, और इसका उपयोग Next.js, Vite और Expo जैसे बड़े प्रोजेक्ट्स में किया जाता है।
इंस्टॉलेशन
Type-fest एक npm पैकेज है जिसे dev-डिपेंडेंसी के रूप में इंस्टॉल किया जाता है (क्योंकि टाइप्स रनटाइम को प्रभावित नहीं करते)।
# npm
npm install --save-dev type-fest
# yarn
yarn add --dev type-fest
# pnpm
pnpm add --save-dev type-fest
ध्यान दें: यह लाइब्रेरी pip के ज़रिए इंस्टॉल नहीं होती — यह केवल TypeScript/JavaScript के लिए है।
त्वरित शुरुआत
इंस्टॉल करने के बाद, आप लाइब्रेरी से किसी भी टाइप को इम्पोर्ट कर सकते हैं। आइए एक सरल उदाहरण देखें — PartialDeep टाइप का उपयोग, जो ऑब्जेक्ट के सभी फील्ड (नेस्टेड फील्ड सहित) को ऑप्शनल बनाता है।
import type { PartialDeep } from 'type-fest';
interface User {
id: number;
name: string;
address: {
city: string;
zip: number;
};
}
// सामान्य Partial केवल पहले लेवल के फील्ड को ऑप्शनल बनाता है
type PartialUser = Partial<User>;
// { id?: number; name?: string; address?: { city: string; zip: number; } }
// PartialDeep सभी नेस्टेड फील्ड को ऑप्शनल बनाता है
type DeepPartialUser = PartialDeep<User>;
// { id?: number; name?: string; address?: { city?: string; zip?: number; } }
const user: DeepPartialUser = {
name: 'Alice',
address: {
city: 'Wonderland'
// zip को निर्दिष्ट करना ज़रूरी नहीं है
}
};
जैसा कि आप देख सकते हैं, PartialDeep ऑटोमैटिकली सभी नेस्टिंग लेवल पर जाता है — यह वही काम है जो आपको रिकर्सिव टाइप्स के साथ मैन्युअली करना पड़ता।
मुख्य तरीके/टाइप्स
आइए Type-fest के 10 सबसे उपयोगी टाइप्स पर नज़र डालें। प्रत्येक के लिए विवरण, पैरामीटर (यदि हों) और एक काम करने वाला उदाहरण दिया गया है।
1. PartialDeep
क्या करता है: ऑब्जेक्ट के सभी प्रॉपर्टीज़ (नेस्टेड प्रॉपर्टीज़ सहित) को ऑप्शनल बनाता है। सभी लेवल पर रिकर्सिवली जाता है।
पैरामीटर: एक अनिवार्य — ऑब्जेक्ट का टाइप।
import type { PartialDeep } from 'type-fest';
interface Config {
server: {
host: string;
port: number;
};
debug: boolean;
}
type PartialConfig = PartialDeep<Config>;
// {
// server?: {
// host?: string;
// port?: number;
// };
// debug?: boolean;
// }
const config: PartialConfig = {
server: {
host: 'localhost'
// port निर्दिष्ट नहीं है — कोई एरर नहीं
}
};
2. RequiredDeep
क्या करता है: ऑब्जेक्ट के सभी प्रॉपर्टीज़ (नेस्टेड प्रॉपर्टीज़ सहित) को अनिवार्य बनाता है। PartialDeep का विपरीत।
पैरामीटर: ऑब्जेक्ट का टाइप।
import type { RequiredDeep } from 'type-fest';
interface User {
name?: string;
address?: {
city?: string;
};
}
type StrictUser = RequiredDeep<User>;
// {
// name: string;
// address: {
// city: string;
// };
// }
// अब सभी फील्ड अनिवार्य हैं
const user: StrictUser = {
name: