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

उपनाम बनाम इंटरफ़ेस टाइप करें

टाइपस्क्रिप्ट में, हम जटिल वस्तुओं की संरचना को दो प्राथमिक तरीकों से परिभाषित कर सकते हैं: इंटरफ़ेस (interface) या टाइप उपनाम (type) का उपयोग करना। दोनों किसी वस्तु या डेटा संरचना के "आकार" का वर्णन करने का काम करते हैं, लेकिन उनमें कुछ बुनियादी अंतर हैं।


इंटरफ़ेस (interface)

एक इंटरफ़ेस किसी ऑब्जेक्ट की संरचना के लिए एक अनुबंध को परिभाषित करता है। यह ऑब्जेक्ट आकृतियों और सार्वजनिक एपीआई का विस्तार योग्य तरीके से वर्णन करने के लिए मानक उपकरण है।

TS
interface Book {
  title: string;
  pages: number;
  author?: string; // Optional property (can be omitted)
}

const myBook: Book = {
  title: 'The Lord of the Rings',
  pages: 1200,
};

प्रश्न चिह्न (?) किसी संपत्ति को वैकल्पिक के रूप में चिह्नित करता है। myBook ऑब्जेक्ट मान्य है, भले ही वह author प्रॉपर्टी को छोड़ दे।


उपनाम टाइप करें (type)

एक प्रकार का उपनाम आपको किसी भी मौजूदा प्रकार के साथ एक नया नाम जोड़ने की अनुमति देता है, जिसमें आदिम प्रकार, यूनियन, टुपल्स या संपूर्ण ऑब्जेक्ट संरचनाएं शामिल हैं।

TS
type Point = {
  x: number;
  y: number;
};

const coordinates: Point = { x: 10, y: 20 };

मुख्य अंतर: विस्तार और घोषणा विलय

हालाँकि interface और type अधिकांश सामान्य उपयोग के मामलों के लिए विनिमेय हैं, वे दो महत्वपूर्ण अंतर प्रदर्शित करते हैं:

1. विस्तारशीलता (विरासत)

इंटरफ़ेस को extends कीवर्ड का उपयोग करके विस्तारित किया जाता है:

TS
interface User {
  username: string;
}

interface Admin extends User {
  privileges: string[];
}

प्रकार के उपनामों को extends का उपयोग करके बढ़ाया नहीं जा सकता है, लेकिन उन्हें इंटरसेक्शन ऑपरेटर (&) का उपयोग करके जोड़ा जा सकता है:

TS
type User = {
  username: string;
};

type Admin = User & {
  privileges: string[];
};

2. घोषणा विलय

समान दायरे में समान नाम वाले एकाधिक इंटरफ़ेस स्वचालित रूप से कंपाइलर द्वारा विलय कर दिए जाते हैं:

TS
interface User {
  name: string;
}
interface User {
  email: string;
}
// Now User has both 'name' and 'email'!

यह व्यवहार प्रकार उपनामों द्वारा समर्थित नहीं है: एक ही type को दो बार घोषित करने से एक संकलन-समय त्रुटि उत्पन्न हो जाएगी।


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

अभ्यास 1: उपयोगकर्ता इंटरफ़ेस

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

उपयोगकर्ता नामक एक इंटरफ़ेस को परिभाषित करें जो उपयोगकर्ता ऑब्जेक्ट का वर्णन करता है। इंटरफ़ेस में शामिल होना चाहिए: एक संख्या के रूप में आईडी, एक स्ट्रिंग के रूप में उपयोगकर्ता नाम, और एक वैकल्पिक स्ट्रिंग के रूप में ईमेल।

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

इसे वैकल्पिक के रूप में चिह्नित करने के लिए सिंटैक्स ईमेल?: स्ट्रिंग का उपयोग करें।

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

अभ्यास 2: प्वाइंट2डी प्रकार उपनाम

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

प्वाइंट2डी नामक एक प्रकार का उपनाम बनाएं जो निर्देशांक x और y (दोनों संख्याएं) के साथ एक द्वि-आयामी बिंदु का प्रतिनिधित्व करता है।

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

सिंटैक्स प्रकार प्वाइंट2डी = { एक्स: नंबर का उपयोग करें; y: संख्या; };

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

व्यायाम 3: इंटरफ़ेस का विस्तार

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

आईडी (संख्या) और मूल्य (संख्या) के साथ उत्पाद नामक इंटरफ़ेस को परिभाषित करें। इसके बाद, डिस्काउंटेडप्रोडक्ट नामक एक इंटरफ़ेस को परिभाषित करें जो उत्पाद का विस्तार करता है और डिस्काउंटकोड (स्ट्रिंग) नामक एक वैकल्पिक संपत्ति जोड़ता है।

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

फ़ील्ड्स को इनहेरिट करने के लिए एक्सटेंडेड प्रोडक्ट का उपयोग करें और डिस्काउंटकोड?: स्ट्रिंग जोड़ें।

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

अभ्यास 4: सर्वर कॉन्फ़िगरेशन

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

किसी सर्वर के लिए कॉन्फ़िगरेशन ऑब्जेक्ट का प्रतिनिधित्व करने वाले ServerConfig नामक एक प्रकार के उपनाम को परिभाषित करें। इसमें शामिल होना चाहिए: होस्ट (स्ट्रिंग), पोर्ट (संख्या), और वैकल्पिक बूलियन फ़ील्ड के रूप में उपयोग HTTPS।

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

सिंटैक्स प्रकार ServerConfig = {host: string; का उपयोग करें; पोर्ट: संख्या; उपयोगHttps?: बूलियन; }.

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