TypeScript 访问修饰符
与其他编程语言一样,TypeScript允许我们在类级别上使用访问修饰符。 它为类成员提供直接的访问控制。这些类成员是函数和属性。我们可以在其自身类中使用类成员,在类外部任何地方或在其子类或派生类中使用。
访问修饰符增加了类成员的安全性并防止它们被无效使用。我们还可以使用它来控制类的数据成员的可见性。如果类不必设置任何访问修饰符,则TypeScript会自动将公共访问修饰符设置为所有类成员。
TypeScript访问修饰符有三种类型。 这些是:
- 公共(Public)
- 私有(Private)
- 受保护的(Protected)
理解所有TypeScript访问修饰符
让我们通过下面的表格来了解访问修饰符。
访问修饰符 | 类内可见 | 子类中可见 | 通过类实例对外部可见 |
---|---|---|---|
公共(Public) | 是(Yes) | 是(Yes) | 是(Yes) |
受保护的(Protected) | 是(Yes) | 是(Yes) | 否(No) |
私有(Private) | 是(Yes) | 否(No) | 否(No) |
公共(Public)
在TypeScript中,默认情况下,类的所有成员(属性和方法)都是公共的。因此,没有必要在成员前加上该关键字。我们可以在任何地方自由访问这些数据成员。
示例
class Student {
public studCode: number;
studName: string;
}
let stud = new Student();
stud.studCode = 101;
stud.studName = "Joe Root";
console.log(stud.studCode+ " "+stud.studName);
在上面的示例中,studCode 是公共的,而 studName 没有使用修饰符声明,因此TypeScript默认将其视为公共的。由于数据成员是公共的,因此可以使用该类的对象在类的外部进行访问。
输出:
私有(Private)
私有访问修饰符不能在其包含类之外访问。它确保类成员仅对其中包含的类可见。
示例
class Student {
public studCode: number;
private studName: string;
constructor(code: number, name: string){
this.studCode = code;
this.studName = name;
}
public display() {
return (`My unique code: {this.studCode}, my name:{this.studName}.`);
}
}
let student: Student = new Student(1, "JoeRoot");
console.log(student.display());
在上面的示例中,studCode 是私有的,而 studName 没有使用修饰符声明,因此TypeScript默认将其视为公共的。如果我们在类外部访问私有成员,它会给出一个编译错误。
输出:
受保护的(protected)
受保护的访问修饰符只能在其类及其子类中访问。我们不能从包含它的类的外部访问它。
例子
class Student {
public studCode: number;
protected studName: string;
constructor(code: number, name: string){
this.studCode = code;
this.studName = name;
}
}
class Person extends Student {
private department: string;
constructor(code: number, name: string, department: string) {
super(code, name);
this.department = department;
}
public getElevatorPitch() {
return (`My unique code: {this.studCode}, my name:{this.studName} and I am in ${this.department} Branch.`);
}
}
let joeRoot: Person = new Person(1, "JoeRoot", "CS");
console.log(joeRoot.getElevatorPitch());
在上面的示例中,我们无法从Student类的外部使用名称。但是因为Person类继承自Student类,我们仍然可以从Person类的实例方法中使用它。
输出:
只读修饰符
- 我们可以通过使用只读修饰符使类、类型或接口的属性只读。
- 这个修饰符需要在声明时或构造函数中初始化。
- 我们也可以从类的外部访问只读成员,但其值不能被改变。
例子
class Company {
readonly country: string = "India";
readonly name: string;
constructor(contName: string) {
this.name = contName;
}
showDetails() {
console.log(this.name + " : " + this.country);
}
}
let comp = new Company("JavaTpoint");
comp.showDetails(); // JavaTpoint : India
comp.name = "TCS"; //Error, name can be initialized only within constructor
输出: