TypeScript में कक्षाएं

यह लेख TypeScript में कक्षाओं को समझाता है।

YouTube Video

TypeScript में कक्षाएं

TypeScript में कक्षाएं JavaScript की ES6 कक्षाओं पर आधारित हैं और टाइप एनोटेशन और एक्सेस मॉडिफायर जैसी अतिरिक्त सुविधाएँ प्रदान करती हैं। यह आपको ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की अवधारणाओं का उपयोग करते हुए अधिक मजबूत और स्पष्ट प्रकार की सुरक्षा सुनिश्चित करने की अनुमति देता है।

नीचे TypeScript में कक्षाओं के बुनियादी उपयोग और सुविधाओं के विवरण दिए गए हैं।

मूल कक्षा परिभाषा

 1class Person {
 2    name: string;  // Member variable
 3    age: number;   // Member variable
 4
 5    // Constructor
 6    constructor(name: string, age: number) {
 7        this.name = name;
 8        this.age = age;
 9    }
10
11    // Method
12    greet(): void {
13        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
14    }
15}
16
17const person = new Person("Alice", 25);
18person.greet();  // Hello, my name is Alice and I am 25 years old.
  • name और age कक्षा की गुणधर्म (सदस्य चर) हैं।
  • constructor वह विधि है जिसे कक्षा का उदाहरण बनाने पर बुलाया जाता है, जो तर्क लेती है और गुणधर्मों को मान निर्दिष्ट करती है।
  • greet कक्षा की एक विधि है, जो यह दर्शाती है कि इसके पास void प्रकार का होने के कारण कोई रिटर्न मान नहीं है।

पहुंच संशोधक

TypeScript में, आप कक्षा गुणधर्मों और विधियों तक पहुँच को नियंत्रित करने के लिए पहुँच संशोधकों (public, private, protected) का उपयोग कर सकते हैं।

public

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

 1class Animal {
 2    public species: string;
 3
 4    constructor(species: string) {
 5        this.species = species;
 6    }
 7
 8    public makeSound(): void {
 9        console.log(`${this.species} makes a sound.`);
10    }
11}
12
13const animal = new Animal("Dog");
14console.log(animal.species);  // Dog
15animal.makeSound();           // Dog makes a sound.
  • species प्रॉपर्टी और makeSound मेथड को public घोषित किया गया है और इन्हें क्लास के बाहर से भी एक्सेस किया जा सकता है।

private

private संशोधक का उपयोग कक्षा के बाहर से गुणधर्मों या विधियों तक पहुँच को रोकता है।

 1class Car {
 2    private brand: string;
 3
 4    constructor(brand: string) {
 5        this.brand = brand;
 6    }
 7
 8    public getBrand(): string {
 9        return this.brand;
10    }
11}
12
13const car = new Car("Toyota");
14// console.log(car.brand);  // Error: 'brand' is private and cannot be accessed.
15console.log(car.getBrand());  // Toyota
  • brand प्रॉपर्टी को private घोषित किया गया है, इसलिए इसे क्लास के बाहर से एक्सेस नहीं किया जा सकता।
  • डेटा को एन्कैप्सुलेट करने के लिए प्रॉपर्टीज़ को private मोडिफायर के साथ छिपाया जा सकता है।

protected

protected संशोधक कक्षा के बाहर से पहुँच को प्रतिबंधित करता है लेकिन इसे उपकक्षाओं (व्युत्पन्न कक्षाओं) में अनुमति देता है।

 1class Vehicle {
 2    protected model: string;
 3
 4    constructor(model: string) {
 5        this.model = model;
 6    }
 7}
 8
 9class Truck extends Vehicle {
10    public getModel(): string {
11        return this.model;
12    }
13}
14
15const truck = new Truck("Ford F-150");
16console.log(truck.getModel());  // Ford F-150
17
18// console.log(truck.model);
19// Error: Property 'model' is protected and only accessible within class 'Vehicle' and its subclasses.
  • model प्रॉपर्टी को protected घोषित किया गया है, इसलिए इसे क्लास के बाहर से एक्सेस नहीं किया जा सकता, लेकिन सबक्लास में एक्सेस किया जा सकता है।

गेटर्स और सेटर्स

TypeScript में, आप गुण मानों को प्राप्त करने और सेट करने के लिए get और set कीवर्ड का उपयोग करके गेटर्स और सेटर्स परिभाषित कर सकते हैं।

 1class Employee {
 2    private _salary: number;
 3
 4    constructor(salary: number) {
 5        this._salary = salary;
 6    }
 7
 8    // Getter
 9    get salary(): number {
10        return this._salary;
11    }
12
13    // Setter
14    set salary(newSalary: number) {
15        if (newSalary > 0) {
16            this._salary = newSalary;
17        } else {
18            console.log("Salary must be positive.");
19        }
20    }
21}
22
23const employee = new Employee(50000);
24console.log(employee.salary);  // 50000
25employee.salary = 60000;
26console.log(employee.salary);  // 60000
27employee.salary = -100;        // Salary must be positive.
  • इस उदाहरण में, salary प्रॉपर्टी के लिए गेटर और सेटेटर का उपयोग बाहरी पहुँच और अपडेट पर नियंत्रण करने के लिए किया गया है। सेटर मान्यता करता है ताकि नकारात्मक मान न दिए जा सकें, और अगर अमान्य मान दिया जाए तो चेतावनी संदेश दिखाता है।

वंश ग्रहण

TypeScript में, कक्षाएं वंश ग्रहण कर सकती हैं। extends कीवर्ड का उपयोग करके, आप माता-पिता की कक्षा से क्रियक्षमता का वंश ग्रहण कर सकते हैं।

 1class Animal {
 2    constructor(public name: string) {}
 3
 4    public move(): void {
 5        console.log(`${this.name} is moving.`);
 6    }
 7}
 8
 9class Bird extends Animal {
10    public fly(): void {
11        console.log(`${this.name} is flying.`);
12    }
13}
14
15const bird = new Bird("Sparrow");
16bird.move();  // Sparrow is moving.
17bird.fly();   // Sparrow is flying.
  • इस उदाहरण में, Bird क्लास, Animal क्लास से इनहेरिट करती है, जिससे वह Animal की move मेथड का उपयोग कर सकती है। इसके अलावा, यह अपनी खुद की fly मेथड परिभाषित करती है, जिससे पैरेंट क्लास से विशेषताएं प्राप्त करने के साथ-साथ नई कार्यक्षमता भी जुड़ जाती है।

सार कक्षाएं

सार कक्षाएं (abstract) को सीधे तौर पर इंस्टैंसिएट नहीं किया जा सकता और इन्हें उपकक्षाओं में ठोस कार्यान्वयन प्रदान करने के लिए टेम्पलेट के रूप में उपयोग किया जाता है।

 1abstract class Shape {
 2    abstract getArea(): number;
 3
 4    public describe(): void {
 5        console.log("This is a shape.");
 6    }
 7}
 8
 9class Circle extends Shape {
10    constructor(private radius: number) {
11        super();
12    }
13
14    public getArea(): number {
15        return Math.PI * this.radius * this.radius;
16    }
17}
18
19const circle = new Circle(5);
20console.log(circle.getArea());  // 78.53981633974483
21circle.describe();  // This is a shape.
  • इस उदाहरण में, Shape को एक एब्स्ट्रैक्ट क्लास के रूप में परिभाषित किया गया है, और getArea एक एब्स्ट्रैक्ट मेथड है जिसे सबक्लास द्वारा लागू करना जरूरी है। Circle क्लास इस एब्स्ट्रैक्ट क्लास से इनहेरिट करती है और अपने getArea मेथड को सर्कल के क्षेत्रफल की गणना के लिए लागू करती है। इसके अलावा, describe जैसी ठोस विधियाँ साझा कार्यक्षमता के रूप में इनहेरिट की जाती हैं और जैसा है वैसा उपयोग की जा सकती हैं।

इंटरफेस के साथ संबंध

कक्षाएं इंटरफेस को लागू कर सकती हैं, यह सुनिश्चित करते हुए कि उनके पास विशिष्ट गुणधर्म और विधियाँ हैं।

 1interface Flyable {
 2    fly(): void;
 3}
 4
 5class Airplane implements Flyable {
 6    public fly(): void {
 7        console.log("The airplane is flying.");
 8    }
 9}
10
11const airplane: Flyable = new Airplane();
12airplane.fly();  // The airplane is flying.
  • इस उदाहरण में, Flyable इंटरफेस fly मेथड के लिए विनिर्देश परिभाषित करता है, और Airplane क्लास इस इंटरफेस को fly मेथड की ठोस परिभाषा देकर लागू करती है। इसके साथ, कोई भी ऑब्जेक्ट जिसे Flyable प्रकार के रूप में माना जा सकता है, उसमें निश्चित रूप से fly मेथड होगी।

स्थैतिक सदस्य

जब आप किसी क्लास में स्थैतिक सदस्य परिभाषित करते हैं, तो वे मेथड और प्रॉपर्टियां स्वयं क्लास से संबंधित होती हैं। स्थैतिक सदस्यों को क्लास का उदाहरण बनाए बिना कॉल किया जा सकता है।

 1class MathUtils {
 2    static PI: number = 3.14;
 3
 4    static add(a: number, b: number): number {
 5        return a + b;
 6    }
 7}
 8
 9console.log(MathUtils.add(10, 20)); // 30
10console.log(MathUtils.PI); // 3.14
  • आप static कीवर्ड का उपयोग करके स्थैतिक मेथड्स परिभाषित करते हैं।
  • इस उदाहरण में, MathUtils क्लास एक स्थैतिक मेथड add और एक स्थैतिक प्रॉपर्टी PI परिभाषित करती है।
  • स्थैतिक सदस्य क्लास के इंस्टेंसेज़ के नहीं होते, बल्कि इन्हें सीधे क्लास से ही कॉल किया जा सकता है।

सारांश

TypeScript कक्षाएं जावास्क्रिप्ट कक्षा कार्यक्षमता में टाइप सुरक्षा, एक्सेस मॉडिफायर्स और एब्स्ट्रैक्ट कक्षाओं जैसी सुविधाएं जोड़ती हैं। यह अधिक शक्तिशाली और सुरक्षित ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की अनुमति देता है।

आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।

YouTube Video