Command Palette

Search for a command to run...

shantow-67
shantow-67
¡4 min read

💊Encapsulation in TypeScript: āĻĄā§‡āϟāĻž āϏ⧁āϰāĻ•ā§āώāĻžāϰ āĻļāĻŋāĻ˛ā§āĻĒ

Encapsulation āĻ•āĻŋ?

Encapsulation āĻšāϞ⧋ Object-Oriented Programming (OOP)-āĻāϰ āĻāĻ•āϟāĻŋ āĻŽā§ŒāϞāĻŋāĻ• āĻ•āύāϏ⧇āĻĒā§āϟ āϝ⧇āĻ–āĻžāύ⧇ āĻĄā§‡āϟāĻž (properties) āĻāĻŦāĻ‚ āϏ⧇āχ āĻĄā§‡āϟāĻž āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻŽā§‡āĻĨāĻĄāϗ⧁āϞ⧋ (functions) āĻāĻ•āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻŸā§‡ (āĻ•ā§āϞāĻžāϏ⧇) āĻŦāĻ¨ā§āĻĻā§€ āĻ•āϰ⧇ āϰāĻžāĻ–āĻž āĻšā§ŸāĨ¤ āĻāϰ āĻŽā§‚āϞ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻšāϞ⧋ āĻĄā§‡āϟāĻžāϕ⧇ āĻŦāĻžāχāϰ⧇āϰ āĻ…āĻŦāĻžāĻžā§āĻ›āĻŋāϤ āĻāĻ•ā§āϏ⧇āϏ āĻĨ⧇āϕ⧇ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āϰāĻžāĻ–āĻž āĻāĻŦāĻ‚ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āĻ˛ā§āĻĄ āωāĻĒāĻžā§Ÿā§‡ āĻĄā§‡āϟāĻž āĻŽāĻĄāĻŋāĻĢāĻžāχ āĻ•āϰāĻžāĨ¤

āĻāϕ⧇ āĻŦāĻžāĻ‚āϞāĻžā§Ÿ “āĻĄā§‡āϟāĻž āĻ—ā§‹āĻĒāύ⧀āĻ•āϰāĻŖâ€ āĻŦāĻž **”āĻ•ā§āϝāĻžāĻĒāϏ⧁āϞāĻžāχāĻœā§‡āĻļāĻ¨â€**āĻ“ āĻŦāϞāĻž āϝāĻžā§ŸāĨ¤ āϝ⧇āĻŽāύ, āĻāĻ•āϟāĻŋ āĻ•ā§āϝāĻžāĻĒāϏ⧁āϞ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āĻ“āώ⧁āϧ āĻĨāĻžāϕ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻžāχāϰ⧇ āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āϏ⧇āϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžā§Ÿ āύāĻž — āĻāĻ•āχāĻ­āĻžāĻŦ⧇ Encapsulation-āĻ āĻĄā§‡āϟāĻžāϕ⧇ āĻĒā§āϰāĻžāχāϭ⧇āϟ āϰāĻžāĻ–āĻž āĻšā§Ÿ āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŽā§‡āĻĨāĻĄā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•ā§āϏ⧇āϏ āĻĻ⧇āĻ“ā§ŸāĻž āĻšā§ŸāĨ¤

TypeScript-āĻ Encapsulation āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻŦ?

TypeScript-āĻ Encapsulation āĻ…āĻ°ā§āϜāύ āĻ•āϰāϤ⧇ āφāĻŽāϰāĻž āύāĻŋāĻšā§‡āϰ āĻŸā§‡āĻ•āύāĻŋāĻ•āϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ:

  • Access Modifiers (āĻĒā§āϰāĻŦ⧇āĻļ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻ•)

  • Getters & Setters (āĻĄā§‡āϟāĻž āĻāĻ•ā§āϏ⧇āϏ⧇āϰ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŋāϤ āĻĒāĻĻā§āϧāϤāĻŋ)

1. Access Modifiers: public, private, protected

TypeScript-āĻ āϤāĻŋāύ āϧāϰāϪ⧇āϰ Access Modifier āφāϛ⧇:

  • public — āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇ āϏāĻŦ āϜāĻžā§ŸāĻ—āĻž āĻĨ⧇āϕ⧇ āĻāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝāĻžā§Ÿ

  • private — āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āĻāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝāĻžā§Ÿ

  • protected — āĻ•ā§āϞāĻžāϏ āĻāĻŦāĻ‚ āĻāϰ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ⧇ āĻāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝāĻžā§Ÿ

āωāĻĻāĻžāĻšāϰāĻŖ:

class BankAccount {
    public readonly accountId: number; // āĻļ⧁āϧ⧁ āϰāĻŋāĻĄ āĻ•āϰāĻž āϝāĻžāĻŦ⧇, āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āύ⧟
    public owner: string; // āϏāĻŦ āϜāĻžā§ŸāĻ—āĻž āĻĨ⧇āϕ⧇ āĻāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝāĻžāĻŦ⧇
    private _balance: number; // āĻļ⧁āϧ⧁ āĻāχ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āĻāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝāĻžāĻŦ⧇
    protected interestRate: number; // āĻāχ āĻ•ā§āϞāĻžāϏ āĻ“ āĻāϰ āϏāĻžāĻŦāĻ•ā§āϞāĻžāϏ⧇ āĻāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝāĻžāĻŦ⧇

    constructor(id: number, owner: string, balance: number) {
        this.accountId = id;
        this.owner = owner;
        this._balance = balance;
        this.interestRate = 0.05;
    }

    deposit(amount: number): void {
        if (amount <= 0) throw new Error("āϟāĻžāĻ•āĻž āĻ…āĻŦāĻļā§āϝāχ āĻĒāϜāĻŋāϟāĻŋāĻ­ āĻšāϤ⧇ āĻšāĻŦ⧇!");
        this._balance += amount;
    }

    getBalance(): number {
        return this._balance;
    }
}

const myAccount = new BankAccount(123, "āϰāĻžāĻšā§āϞ", 5000);
myAccount.deposit(1000);
console.log(myAccount.getBalance()); // 6000

// myAccount._balance = 100000; // Error! āĻ•āĻžāϰāĻŖ _balance āĻĒā§āϰāĻžāχāϭ⧇āϟ

2. Getters & Setters: āĻĄā§‡āϟāĻž āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻ•āϰāĻžāϰ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āωāĻĒāĻžā§Ÿ

āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻĒā§āϰāĻžāχāϭ⧇āϟ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋāϕ⧇ āĻŦāĻžāχāϰ⧇ āĻĨ⧇āϕ⧇ āϰāĻŋāĻĄ āĻŦāĻž āĻŽāĻĄāĻŋāĻĢāĻžāχ āĻ•āϰāϤ⧇ āϚāĻžāχ, āϤāĻžāĻšāϞ⧇ getter (āĻĄā§‡āϟāĻž āĻĒ⧜āĻžāϰ āĻŽā§‡āĻĨāĻĄ) āĻāĻŦāĻ‚ setter (āĻĄā§‡āϟāĻž āϏ⧇āϟ āĻ•āϰāĻžāϰ āĻŽā§‡āĻĨāĻĄ) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

class Person {
    private _age: number;

    constructor(age: number) {
        this._age = age;
    }

    // Getter
    get age(): number {
        return this._age;
    }

    // Setter (āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ āϏāĻš)
    set age(newAge: number) {
        if (newAge < 0 || newAge > 120) {
            throw new Error("āĻŦ⧟āϏ ā§Ļ āĻĨ⧇āϕ⧇ ⧧⧍ā§Ļ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻšāϤ⧇ āĻšāĻŦ⧇!");
        }
        this._age = newAge;
    }
}

const person = new Person(25);
console.log(person.age); // 25 (getter āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇)

person.age = 30; // setter āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇
// person.age = 150; // Error! āĻ•āĻžāϰāĻŖ āĻŦ⧟āϏ ⧧⧍ā§Ļ āĻāϰ āĻŦ⧇āĻļāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āύāĻž

Encapsulation-āĻāϰ āϏ⧁āĻŦāĻŋāϧāĻž

  • ✅ āĻĄā§‡āϟāĻž āϏ⧁āϰāĻ•ā§āώāĻž: āĻĒā§āϰāĻžāχāϭ⧇āϟ āĻĄā§‡āϟāĻž āĻŦāĻžāχāϰ⧇ āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžā§Ÿ āύāĻžāĨ¤

  • ✅ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ: āϏ⧇āϟāĻžāϰ āĻŽā§‡āĻĨāĻĄā§‡ āĻļāĻ°ā§āϤ āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āĻĄā§‡āϟāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

  • ✅ āĻŽā§‡āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϝāĻžāĻ¨ā§āϏ āϏāĻšāϜ: āχāĻ¨ā§āϟāĻžāĻ°ā§āύāĻžāϞ āϞāϜāĻŋāĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϞ⧇ āĻŦāĻžāχāϰ⧇āϰ āϕ⧋āĻĄā§‡ āĻĒā§āϰāĻ­āĻžāĻŦ āĻĒā§œā§‡ āύāĻžāĨ¤

  • ✅ āϕ⧋āĻĄā§‡āϰ āϰāĻŋāχāωāĻœā§‡āĻŦāĻŋāϞāĻŋāϟāĻŋ: āĻ•ā§āϞāĻžāϏāϗ⧁āϞ⧋āϕ⧇ āϏāĻšāĻœā§‡ āĻ…āĻ¨ā§āϝ āĻĒā§āϰ⧋āĻœā§‡āĻ•ā§āĻŸā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ

TypeScript-āĻ Encapsulation āĻšāϞ⧋ āĻĄā§‡āϟāĻž āĻ“ āĻŽā§‡āĻĨāĻĄāϕ⧇ āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āϰāĻžāĻ–āĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ, āϝāĻžāϤ⧇ āĻŦāĻžāχāϰ⧇ āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻāĻ•ā§āϏ⧇āϏ āύāĻž āĻ•āϰ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āύāĻŋ⧟āĻŽā§‡ āĻĄā§‡āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻ“ āϰāĻŋāϞāĻžā§ŸāĻžāĻŦāĻŋāϞāĻŋāϟāĻŋ āĻŦāĻžā§œāĻžā§ŸāĨ¤

 class SecureData {
    private _secret: string = "āĻ—ā§‹āĻĒāύ āϤāĻĨā§āϝ";

    get secret(): string {
        return this._secret.replace("āĻ—ā§‹āĻĒāύ", "****");
    }
}

const data = new SecureData();
console.log(data.secret); // "**** āϤāĻĨā§āϝ" (āφāϏāϞ āĻĄā§‡āϟāĻž āϏ⧁āϰāĻ•ā§āώāĻŋāϤ!)```

Comments

  • Type and hit enter to post comment
  • For multiline comments, use Shift + Enter
  • You can use markdown syntax for formatting

Cookie Consent

We use cookies to enhance your browsing experience and analyze our traffic. By clicking "Accept", you consent to our use of cookies.