मॉड्यूल पाठ (2/2)
मैप किए गए प्रकार
मैप किए गए प्रकार आपको मौजूदा प्रकारों के गुणों को एक-एक करके परिवर्तित करके नए प्रकार बनाने की अनुमति देते हैं। वे keyof ऑपरेटर का उपयोग करके कुंजियों पर लूप सिंटैक्स के शीर्ष पर बनाए गए हैं।
type Mapped<T> = {
[P in keyof T]: T[P];
};यह उदाहरण मूल के समान एक मैप किए गए प्रकार को दिखाता है: यह keyof T में प्रत्येक कुंजी P पर पुनरावृत्त होता है और समान प्रकार T[P] निर्दिष्ट करता है।
परिवर्तनशीलता और वैकल्पिकता संशोधक
हम readonly और ? (वैकल्पिकता) जैसे संशोधकों को + (जोड़ें, डिफ़ॉल्ट) या - (हटाएं) के साथ उपसर्ग करके जोड़ या हटा सकते हैं।
उदाहरण के लिए, किसी प्रकार की सभी संपत्तियों से वैकल्पिकता को हटाने के लिए (उन्हें आवश्यक बनाना):
type Concrete<T> = {
[P in keyof T]-?: T[P];
};-? संशोधक प्रत्येक संपत्ति से वैकल्पिकता ध्वज को हटा देता है।
as के साथ कुंजी रीमैपिंग
टाइपस्क्रिप्ट 4.1+ में, आप as क्लॉज और टेम्पलेट शाब्दिक प्रकारों का उपयोग करके मैप किए गए प्रकार में कुंजियों को रीमैप कर सकते हैं।
type WriteSetters<T> = {
[K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};यहां हम प्रत्येक संपत्ति का नाम K से set[CapitalizedKey] में बदल रहे हैं और इसके प्रकार को एक सेटर फ़ंक्शन में संशोधित कर रहे हैं।
खुद कोशिश करना
अभ्यास 1: गुणों को निरर्थक बनाना
एक सामान्य मैप प्रकार Nullable<T> घोषित करें जो एक ऑब्जेक्ट T लेता है और प्रत्येक संपत्ति को बदल देता है ताकि यह मान null को भी स्वीकार कर सके (जैसे T[K] | null)।
संकेत दिखाएँ
सिंटैक्स का प्रयोग करें [K in keyof T]: T[K] | व्यर्थ; मैप किए गए प्रकार के ऑब्जेक्ट के अंदर।
3 प्रयासों के बाद समाधान उपलब्ध है
अभ्यास 2: as के साथ डायनामिक गेटर्स उत्पन्न करना
GetterNames<T> नाम से एक मैप किया गया प्रकार बनाएं जो ऑब्जेक्ट T की कुंजियों को 'get' के साथ उपसर्ग करके और मूल कुंजी को कैपिटलाइज़ करके बदल देता है (कैपिटलाइज़ का उपयोग करें)। उदाहरण के लिए, यदि कोई कुंजी नाम है, तो उसे getName बनना चाहिए। गुणों के प्रकार को () => T[K] पर सेट करें।
संकेत दिखाएँ
कुंजी को रीमैप करने के लिए \`get\${Capitalize<string & K>}\` के रूप में और () => T[K] को प्रॉपर्टी रिटर्न प्रकार के रूप में उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है