मुख्य सामग्री पर जाएं
मॉड्यूल 5 · पाठ 2 का 2पाठ्यक्रम में 10/14~15 min
मॉड्यूल पाठ (2/2)

शाब्दिक प्रकार और दावे

टाइपस्क्रिप्ट वेरिएबल्स के संभावित मूल्यों को कम करने और आवश्यक होने पर कंपाइलर को अधिक विशिष्ट प्रकारों को पहचानने के लिए मजबूर करने के लिए उन्नत उपकरण प्रदान करता है।

शाब्दिक प्रकार

एक शाब्दिक प्रकार एक सटीक, एकल मान (उदाहरण के लिए, एक विशिष्ट स्ट्रिंग या संख्या) का प्रतिनिधित्व करता है। वे आम तौर पर संघ प्रकारों के साथ संयुक्त होते हैं:

TS
type TrafficLight = 'red' | 'yellow' | 'green';
let light: TrafficLight;

light = 'red'; // OK
light = 'blue'; // Error: "blue" is not assignable to TrafficLight

अभिकथन टाइप करें (as)

कभी-कभी आपके पास ऐसे प्रकार के बारे में जानकारी होती है जिसे टाइपस्क्रिप्ट संकलन समय पर नहीं जान सकता है। इन मामलों में, आप as कीवर्ड का उपयोग करके प्रकार के दावे का उपयोग कर सकते हैं:

TS
const myCanvas = document.getElementById('main_canvas') as HTMLCanvasElement;

दावा संकलक को बताता है: "मुझ पर भरोसा करें, मुझे पता है कि यह तत्व एक HTMLCanvasElement है"। यह रनटाइम पर कोई जाँच या कास्ट नहीं करता है; यह केवल टाइप चेकर की मदद करता है।

स्थिर अभिकथन (as const)

जब हम किसी ऑब्जेक्ट या ऐरे को const के साथ घोषित करते हैं, तो टाइपस्क्रिप्ट अभी भी इसके आंतरिक गुणों को संशोधित करने की अनुमति देता है। अंत में as const जोड़कर, पूरी संरचना को स्थिर कर दिया जाता है और केवल-पढ़ने के लिए बना दिया जाता है, जिससे सभी गुण उनके सटीक शाब्दिक प्रकारों में परिवर्तित हो जाते हैं:

TS
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Error: array is read-only

टेम्पलेट शाब्दिक प्रकार

टेम्प्लेट शाब्दिक प्रकार जावास्क्रिप्ट टेम्प्लेट स्ट्रिंग्स के शीर्ष पर बनाए जाते हैं, लेकिन टाइप पोजीशन में उपयोग किए जाते हैं। वे कई शाब्दिक प्रकारों को एक में संयोजित करने की अनुमति देते हैं:

TS
type Size = 'small' | 'large';
type Color = 'red' | 'blue';

// Creates the union: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;

टेम्पलेट शाब्दिक प्रकारों में स्ट्रिंग उपयोगिताएँ

टाइपस्क्रिप्ट टेम्पलेट शाब्दिक प्रकारों के भीतर वर्णों में हेरफेर करने के लिए विशेष उपयोगिता प्रकार प्रदान करता है:

  • Capitalize<StringType>: स्ट्रिंग के पहले अक्षर को बड़ा करता है।
  • Uncapitalize<StringType>: स्ट्रिंग के पहले अक्षर को बड़े अक्षर से हटाता है।
  • Uppercase<StringType>: संपूर्ण स्ट्रिंग को अपरकेस में परिवर्तित करता है।
  • Lowercase<StringType>: संपूर्ण स्ट्रिंग को लोअरकेस में परिवर्तित करता है।
TS
type ActionType = 'click' | 'hover';

// Generates: "onClick" | "onHover"
type EventHandlers = `on${Capitalize<ActionType>}`;

खुद कोशिश करना

अभ्यास 1: दिशा शाब्दिक संघ

व्यायाम#ts.m5.l2.e1
प्रयास: 0लोड हो रहा है...

दिशा नामक एक शाब्दिक प्रकार को परिभाषित करें जो केवल 'ऊपर', 'नीचे', 'बाएं', या 'दाएं' स्ट्रिंग को स्वीकार करता है। फिर move(dir: Direction): स्ट्रिंग नामक एक फ़ंक्शन घोषित करें जो प्राप्त दिशा के बाद स्ट्रिंग 'मूविंग' लौटाता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

| द्वारा अलग किए गए चार विकल्पों के साथ पहले उपनाम प्रकार को परिभाषित करें, फिर पैरामीटर और रिटर्न प्रकार को एनोटेट करते हुए मूव फ़ंक्शन घोषित करें।

3 प्रयासों के बाद समाधान उपलब्ध है

अभ्यास 2: JSON.parse पर अभिकथन

व्यायाम#ts.m5.l2.e2
प्रयास: 0लोड हो रहा है...

JSON.parse फ़ंक्शन डिफ़ॉल्ट रूप से कोई भी प्रकार लौटाता है। ParseUser फ़ंक्शन को संशोधित करें ताकि JSON.parse(json) का परिणाम as कीवर्ड का उपयोग करके टाइप { उपयोगकर्ता नाम: स्ट्रिंग } के रूप में दर्ज किया जा सके।

संपादक लोड हो रहा है...
संकेत दिखाएँ

JSON.parse(json) कॉल के तुरंत बाद 'as {username: string }' जोड़ें।

3 प्रयासों के बाद समाधान उपलब्ध है

अभ्यास 3: घटनाओं के लिए टेम्पलेट शाब्दिक

व्यायाम#ts.m5.l2.e3
प्रयास: 0लोड हो रहा है...

स्थिति और क्रिया प्रकारों को देखते हुए, 'स्टेटस-एक्शन' प्रारूप में इवेंट नामक टेम्पलेट स्ट्रिंग प्रकार को परिभाषित करें (उदाहरण के लिए, 'ओपन-क्लिक')।

संपादक लोड हो रहा है...
संकेत दिखाएँ

प्रकार और अंदर ${Status}-${Action} सिंटैक्स को परिभाषित करने के लिए बैकटिक्स का उपयोग करें।

3 प्रयासों के बाद समाधान उपलब्ध है

अभ्यास 4: बड़े अक्षरों के साथ टेम्पलेट शाब्दिक प्रकार

व्यायाम#ts.m5.l2.e4
प्रयास: 0लोड हो रहा है...

एक शाब्दिक प्रकार का ईवेंट परिभाषित करें जो 'क्लिक' या 'होवर' हो सकता है। फिर, बड़े अक्षरों में इवेंट नाम (यानी, 'ऑनक्लिक' या 'ऑनहोवर') के बाद प्रारूप में स्ट्रिंग्स का प्रतिनिधित्व करने वाले इवेंटहैंडलर को घोषित करने के लिए टेम्प्लेट लिटरल टाइप्स का उपयोग करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

ईवेंट के पहले अक्षर को बड़ा करने के लिए टेम्प्लेट शाब्दिक के अंदर Capitalize<Event> का उपयोग करें।

3 प्रयासों के बाद समाधान उपलब्ध है