मॉड्यूल पाठ (2/2)
उपयोगिता प्रकार
टाइपस्क्रिप्ट सामान्य प्रकार के परिवर्तनों को सुविधाजनक बनाने के लिए कई वैश्विक उपयोगिता प्रकार प्रदान करता है। ये प्रकार सामान्य हैं और आपको मौजूदा प्रकारों से घोषणात्मक रूप से नए प्रकार बनाने की अनुमति देते हैं।
सबसे अधिक उपयोग किए जाने वाले चार उपयोगिता प्रकार हैं:
1. Partial<T>
एक प्रकार की सभी संपत्तियों को T वैकल्पिक बनाता है। यह अपडेट/पैच फ़ंक्शंस के लिए बेहद उपयोगी है जहां कॉलर केवल फ़ील्ड का सबसेट प्रदान कर सकता है:
interface User {
id: number;
name: string;
email: string;
}
// All properties of User become optional: { id?: number; name?: string; email?: string; }
type UserUpdate = Partial<User>;2. Readonly<T>
एक प्रकार की सभी संपत्तियों को T केवल पढ़ने के लिए बनाता है। किसी संपत्ति को पुन: असाइन करने का कोई भी प्रयास संकलन-समय कंपाइलर त्रुटि को ट्रिगर करेगा:
interface Point {
x: number;
y: number;
}
const p: Readonly<Point> = { x: 10, y: 20 };
// p.x = 5; // Error: cannot assign to 'x' because it is a read-only property3. Pick<T, Keys>
T प्रकार से केवल कुंजियों के एक विशिष्ट सेट (स्ट्रिंग यूनियन द्वारा दर्शाया गया) का चयन करके एक प्रकार बनाता है:
interface Article {
id: number;
title: string;
content: string;
views: number;
}
// Selects only 'title' and 'views': { title: string; views: number; }
type ArticlePreview = Pick<Article, 'title' | 'views'>;4. Omit<T, Keys>
T प्रकार से कुंजियों के एक विशिष्ट सेट को हटाकर एक प्रकार बनाता है। यह Pick का दोहरा है:
interface Product {
id: number;
name: string;
price: number;
secretVendorCode: string;
}
// Removes 'secretVendorCode': { id: number; name: string; price: number; }
type PublicProduct = Omit<Product, 'secretVendorCode'>;5. Record<Keys, Type>
एक ऑब्जेक्ट प्रकार बनाता है जिसकी गुण कुंजियाँ Keys हैं और जिनके गुण मान Type हैं। यह कुंजी को मानों से मैप करने, शब्दकोशों या हैश तालिकाओं (कुंजी-मूल्य मानचित्र) का प्रतिनिधित्व करने के लिए बेहद उपयोगी है:
type Page = 'home' | 'about' | 'contact';
interface PageInfo {
title: string;
}
// Creates a dictionary with keys 'home' | 'about' | 'contact' and values PageInfo
const nav: Record<Page, PageInfo> = {
home: { title: 'Home Page' },
about: { title: 'About Us' },
contact: { title: 'Contact Us' },
};खुद कोशिश करना
अभ्यास 1: आंशिक के साथ प्रोफ़ाइल अद्यतन
अपडेटप्रोफ़ाइल फ़ंक्शन को पूरा करें जो एक मूल प्रोफ़ाइल (प्रोफ़ाइल) और एक अपडेट ऑब्जेक्ट (अपडेट) स्वीकार करता है जहां प्रोफ़ाइल के सभी फ़ील्ड वैकल्पिक हैं। इसे अद्यतनों के साथ मूल गुणों को मिलाकर एक नया प्रोफ़ाइल ऑब्जेक्ट लौटाना होगा।
संकेत दिखाएँ
अपडेट पैरामीटर के लिए आंशिक <प्रोफ़ाइल> उपयोगिता प्रकार का उपयोग करें, और ऑब्जेक्ट को मर्ज करने के लिए स्प्रेड ऑपरेटर का उपयोग करें: { ...मूल, ...अपडेट }।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम 2: ओमिट के साथ संवेदनशील क्षेत्रों को हटाना
UserAccount प्रकार को देखते हुए, SafeUser नामक एक प्रकार का उपनाम परिभाषित करें जो संवेदनशील पासवर्डहैश प्रॉपर्टी को छोड़ देता है।
संकेत दिखाएँ
प्रकार SafeUser = Omit<UserAccount, 'passwordHash'> का उपयोग करें; निर्दिष्ट फ़ील्ड को छोड़ने के लिए.
3 प्रयासों के बाद समाधान उपलब्ध है
अभ्यास 3: पिक एंड रीड ओनली के साथ सार्वजनिक कॉन्फिग
AppConfig प्रकार को देखते हुए, PublicConfig नाम के एक प्रकार के उपनाम को परिभाषित करें जो केवल-पढ़ने के लिए (केवल पढ़ने के लिए) संस्करण है जिसमें पिक का उपयोग करके चयनित केवल apiEndpoint और पोर्ट गुण शामिल हैं।
संकेत दिखाएँ
PublicConfig = Readonly<Pick<AppConfig, 'apiEndpoint' | प्रकार का उपयोग करें 'पोर्ट'>>;
3 प्रयासों के बाद समाधान उपलब्ध है
अभ्यास 4: रिकॉर्ड और रीड ओनली के साथ उपयोगकर्ता रजिस्ट्री
फ़ील्ड आईडी: संख्या और नाम: स्ट्रिंग के साथ एक उपयोगकर्ता इंटरफ़ेस को देखते हुए, एक प्रकार ReadOnlyUser बनाएं जो उपयोगकर्ता में सभी फ़ील्ड को केवल पढ़ने योग्य बनाता है। फिर, एक प्रकार का UserRegistry बनाएं जो एक शब्दकोश का प्रतिनिधित्व करता है जहां कुंजी एक स्ट्रिंग है (उदाहरण के लिए, स्ट्रिंग आईडी) और मान एक ReadOnlyUser है।
संकेत दिखाएँ
ReadOnlyUser को परिभाषित करने के लिए Readonly<User> का उपयोग करें, और रजिस्ट्री के लिए रिकॉर्ड<string, ReadOnlyUser> का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है