टाइपप्रति निजी वर्ग गुण

टाइपस्क्रिप्ट कक्षाओं के लिए निजी गुणों का समर्थन करता है

टाइपप्रति कक्षाओं में अभिगम नियंत्रण

कई प्रोग्रामिंग भाषाएं अपनी कक्षाओं के गुणों को डिफ़ॉल्ट रूप से निजी के रूप में परिभाषित करती हैं। उदाहरण के बाहर से उन्हें सुलभ बनाने के लिए, आपको आम तौर पर प्रासंगिक गुणों को "सार्वजनिक" कीवर्ड के साथ चिह्नित करना होगा।

टाइपस्क्रिप्ट कक्षाओं में भी यही कीवर्ड उपलब्ध है, लेकिन इसका बहुत अधिक प्रभाव नहीं पड़ता है, क्योंकि टाइपस्क्रिप्ट कक्षाओं में गुण डिफ़ॉल्ट रूप से सार्वजनिक होते हैं। यह बाधा जावास्क्रिप्ट से विरासत में मिली है, जो कक्षाओं में निजी गुणों का समर्थन नहीं करती है। खैर, हाल तक।

जावास्क्रिप्ट में निजी क्षेत्र?

हां और ना। वर्तमान में, जावास्क्रिप्ट कक्षाओं में निजी गुणों को परिभाषित करने वाली एक युक्ति के लिए एक कार्य मसौदा चरण 3 में है, जो इंगित करता है कि अंतिम परिभाषा प्रशंसनीय है, लेकिन अभी तक निश्चित नहीं है।

कल्पना में प्रस्तावित परिवर्तन वास्तव में सरल हैं और केवल सिंटैक्स को थोड़ा संशोधित करते हैं। किसी संपत्ति को निजी के रूप में चिह्नित करने के लिए, बस इसे हैशटैग के साथ उपसर्ग करें। इतना ही!

class User {
  // A prop marked as private.
  #id;
  age;
  
  constructor(age){
    this.age = age;
    // Valid assignment, as we're 
    // within the class.
    this.#id = Math.floor(Math.random() * 1000);
  }
}

// ... Later in the code ...

const user = new User(42);
// Error! Won't work as it's private.
user.#id = 123;

टाइपप्रति में निजी क्षेत्र!

टाइपस्क्रिप्ट में निजी गुणों के लिए वही सिंटैक्स लागू होता है। संस्करण 3.8 के बाद से, आप इस सुविधा का उपयोग उदाहरणों के साथ-साथ स्थिर क्षेत्रों के लिए गुणों और कार्यों तक पहुंच को बेहतर ढंग से नियंत्रित करने के लिए कर सकते हैं। सिंटैक्स जावास्क्रिप्ट उदाहरण के समान है।

कृपया एक पल, निजी स्थिर क्षेत्र?

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

कृपया ध्यान दें कि टाइपस्क्रिप्ट कक्षाओं के लिए "निजी" के दो अलग-अलग रूपों का समर्थन करता है। आमतौर पर ज्ञात कीवर्ड "निजी" के साथ होता है, जो चिह्नित क्षेत्रों को व्युत्पन्न कक्षाओं से भी अप्राप्य रखता है।

दूसरी विशेषता, जिसे मैं यहां दिखा रहा हूं और जो नई है, तथाकथित "निजी नामों" का उपयोग है। वे जावास्क्रिप्ट के लिए समान वाक्यविन्यास हैं, क्योंकि उनकी कल्पना मूल रूप से जेएस द्वारा परिभाषित की गई थी। टाइपस्क्रिप्ट में, वे रनटाइम के दौरान एक्सेस को नियंत्रित करते हैं।

/**
 * A class that uses already known
 * private props.
 */
class CommonUser {
  // Common 'private' prop in TS.
  private id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    this.id = Math.floor(Math.random() * 1000);
  }
}

/**
 * Using the new sytanx for private class names.
 */
class SpecialUser {
  #id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    // Valid, we're inside the class.
    this.#id = SpecialUser.#generateId();
  }
  
  static #generateId(){
    return Math.floor(Math.random() * 1000);
  }
  
  #stringifyId(){
    return this.#id.toString();
  }
}

// ... Later in the code ...

// Invalid, call is outside of class 'SpecialUser'.
SpecialUser.#generateId();

const user = new SpecialUser(42);
// And that won't work as well.
user.#stringifyId();

अंतिम अध्याय के लिए अंतिम शब्द

यह लेख बहुत लंबा नहीं है, लेकिन टाइपस्क्रिप्ट द्वारा प्रदान की जाने वाली एक महान विशेषता के साथ-साथ टाइपस्क्रिप्ट के अधिक सामान्य लाभ पर प्रकाश डाला गया है। जावास्क्रिप्ट के लिए, निजी गुण अभी भी एक मसौदा है (यद्यपि बहुत देर से चरण में), लेकिन टाइपस्क्रिप्ट के लिए वे पहले ही कार्यान्वित और भेज दिए गए हैं, जो उस गति को दिखाता है जिस पर यह भाषा विकसित हो रही है!

सुझाव

संबंधित

परिशिष्ट

भाषाएँ