What are considered the types of access modifiers supported by TypeScript?

Understanding TypeScript Access Modifiers

The correct answer to the question "What are considered the types of access modifiers supported by TypeScript?" is "All of the above". This includes Public, Private, and Protected. Access modifiers in TypeScript are used to set the accessibility of properties, methods, and constructors in a class. Let's look at each of these three types of access modifiers used in TypeScript.

Public Access Modifier

In TypeScript, each class member is public by default. So, you do not need to prefix a member with the keyword public. The public members of a class can be accessed from anywhere. Here's an example:

class Employee {
    public name: string;

    constructor(name: string) {
        this.name = name;
    }
}

let emp = new Employee('John');
console.log(emp.name); // Accessible directly

In the above code, name is a public member, so it can be accessed directly outside the class.

Private Access Modifier

The private access modifier ensures that class members are visible only to that class and cannot be accessed outside the enclosing class. Here's an example:

class Employee {
    private name: string;

    constructor(name: string) {
        this.name = name;
    }
}

let emp = new Employee('John');
console.log(emp.name); // Error: Property 'name' is private and only accessible within class 'Employee'.

In the above code, name is a private member, so it cannot be accessed outside of the Employee class.

Protected Access Modifier

The protected access modifier is similar to the private modifier with one difference — protected members are accessible within their containing class and by instances of their subclass. Here's an example:

class Person {
    protected name: string;

    constructor(name: string) {
        this.name = name;
    }
}

class Employee extends Person {
    private department: string;

    constructor(name: string, department: string) {
        super(name);
        this.department = department;
    }

    public getDetails() {
        return `Hello, my name is ${this.name} and I work in ${this.department}.`;
    }
}

let emp = new Employee('John', 'HR');
console.log(emp.getDetails()); // Outputs: Hello, my name is John and I work in HR.

In the above code, name is a protected member, so it can be accessed within the Person class and the Employee subclass.

Access modifiers in TypeScript help to encapsulate class members, promoting object-oriented design principles. Understanding how and when to use each type is key to writing maintainable and efficient TypeScript code.

Do you find this helpful?