TypeScript 访问修饰符
TypeScript 中 public、private 和 protected 的使用和区别
问题
TypeScript 支持哪些访问修饰符,它们有什么区别?
解答
TypeScript 提供三种访问修饰符来控制类成员的可访问性:public、private 和 protected。
public(公共)
类的所有成员、子类以及类的实例都可以访问。
class Animal {
public name: string;
constructor(name: string) {
this.name = name;
}
public move() {
console.log(`${this.name} is moving`);
}
}
const dog = new Animal('Dog');
dog.name; // 可访问
dog.move(); // 可访问
protected(受保护)
类及其子类可以访问,但类的实例无法访问。
class Animal {
protected name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
bark() {
console.log(`${this.name} is barking`); // 子类可访问
}
}
const dog = new Dog('Dog');
dog.name; // 错误:无法访问
private(私有)
只有类本身可以访问,子类和实例都无法访问。
class Animal {
private age: number;
constructor(age: number) {
this.age = age;
}
getAge() {
return this.age; // 类内部可访问
}
}
class Dog extends Animal {
showAge() {
console.log(this.age); // 错误:子类无法访问
}
}
const dog = new Animal(5);
dog.age; // 错误:实例无法访问
默认修饰符
如果不指定访问修饰符,默认为 public。
class Animal {
name: string; // 等同于 public name: string
}
关键点
public:类、子类、实例都可访问(默认修饰符)protected:类和子类可访问,实例不可访问private:仅类本身可访问,子类和实例都不可访问- 未指定修饰符时默认为
public
目录