मॉड्यूल पाठ (1/2)
सशर्त प्रकार और अनुमान
सशर्त प्रकार आपको विरासत संबंधों के आधार पर गैर-तुच्छ प्रकार के निर्णय व्यक्त करने की अनुमति देते हैं। वाक्यविन्यास जावास्क्रिप्ट के टर्नरी ऑपरेटर जैसा दिखता है:
T extends U ? X : Yयदि प्रकार T U को सौंपा जा सकता है, तो परिणामी प्रकार X होगा, अन्यथा यह Y होगा।
बुनियादी सशर्त प्रकार
एक सशर्त प्रकार संकलन समय पर एक शर्त का मूल्यांकन करता है:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseलचीले और गतिशील उपयोगिता प्रकार बनाने के लिए जेनरिक के साथ संयुक्त होने पर यह पैटर्न बेहद शक्तिशाली होता है।
infer के साथ एक्सट्रैक्शन टाइप करें
सशर्त प्रकार के extends खंड के अंदर, हम संकलक द्वारा अनुमानित प्रकार के चर को घोषित करने के लिए infer कीवर्ड का उपयोग कर सकते हैं।
उदाहरण के लिए, यदि हम किसी फ़ंक्शन का रिटर्न प्रकार निकालना चाहते हैं:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // stringइस उदाहरण में, infer R टाइपस्क्रिप्ट को फ़ंक्शन के रिटर्न प्रकार को स्वचालित रूप से निर्धारित करने और इसे सशर्त की सकारात्मक शाखा में R के रूप में उपलब्ध कराने के लिए कहता है।
खुद कोशिश करना
अभ्यास 1: IsString प्रकार
IsString<T> नाम का एक सामान्य प्रकार बनाएं जो कि यदि T स्ट्रिंग का विस्तार करता है तो शाब्दिक प्रकार सत्य लौटाता है, अन्यथा गलत।
संकेत दिखाएँ
सिंटैक्स प्रकार IsString<T> = T एक्सटेंड्स स्ट्रिंग का उपयोग करें? सत्य : असत्य; प्रकार की जाँच करने के लिए.
3 प्रयासों के बाद समाधान उपलब्ध है
अभ्यास 2: infer के साथ एक सरणी से एक प्रकार निकालना
एक सामान्य प्रकार UnpackArray<T> को परिभाषित करें जो किसी सरणी T के तत्व प्रकार को निकालने के लिए infer का उपयोग करता है। यदि T एक सरणी है (उदाहरण के लिए U[]), तो U लौटाएँ, अन्यथा उसी प्रकार T लौटाएँ।
संकेत दिखाएँ
टी एक्सटेंड्स (अनुमान यू)[] का उपयोग करें? यू : टी अनुमानित प्रकार के वेरिएबल यू को घोषित करने और वापस करने के लिए।
3 प्रयासों के बाद समाधान उपलब्ध है