TypeScript 访问修饰符
摘要:在本教程中,你将了解 TypeScript 中的访问修饰符,包括 private
、protected
和 public
。
访问修饰符改变类的属性和方法的可见性。 TypeScript 提供了三种访问修饰符:
- private
- protected
- public
请注意,TypeScript 是在编译时(而不是运行时)控制可见性。
private 修饰符
private
修饰符把可见性限制于同一类的内部。 当你将 private
修饰符添加到属性或方法时,可以在同一类中访问该属性或方法。 任何在类的外部尝试访问私有属性或方法都将导致编译时错误。
以下示例演示如何对 Person
类的 snn
、firstName
和 lastName
属性使用 private
修饰符:
class Person {
private ssn: string;
private firstName: string;
private lastName: string;
// ...
}
一旦 private
属性定义后,就可以在 Person
类的构造函数或方法中访问 ssn
属性。 例如:
class Person {
private ssn: string;
private firstName: string;
private lastName: string;
constructor(ssn: string, firstName: string, lastName: string) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
}
getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
}
以下代码尝试在类外部访问 ssn
属性:
let person = new Person('153-07-3130', 'John', 'Doe');
console.log(person.ssn); // compile error
public 修饰符
public
修饰符允许从所有位置访问类属性和方法。 如果没有为属性和方法指定任何访问修饰符,它们将默认采用 public
修饰符。
例如,Person
类的 getFullName()
方法具有 public
修饰符。 以下代码显式地将 public
修饰符添加到 getFullName()
方法:
class Person {
// ...
public getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
// ...
}
它与省略 public
关键字具有相同的效果。
protected 修饰符
protected
修饰符允许在同一个类及其子类中访问类的属性和方法。
当一个类(子类)继承于另一个类(父类)时,它是父类的子类。
如果你尝试从其他任何地方访问受保护的属性或方法,TypeScript 编译器将发出错误。
要将 protected
修饰符添加到属性或方法,可以使用 protected
关键字。 例如:
class Person {
protected ssn: string;
// other code
}
ssn
属性现在受到保护。 它将在 Person
类以及从 Person
类继承的任何类中访问。
Person
类声明了两个私有属性和一个受保护属性。 它的构造函数将这些属性初始化为三个参数。
为了使代码更短,TypeScript 允许你声明属性并在构造函数中初始化它们,如下所示:
class Person {
constructor(protected ssn: string, private firstName: string, private lastName: string) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
}
getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
}
当你考虑属性和方法的可见性时,最好从最不可见的访问修饰符(即 private
)开始。
概括
- TypeScript 为类属性和方法提供了三种访问修饰符:
private
、protected
和public
。 private
修饰符允许在同一个类中进行访问。protected
修饰符允许在同一类和子类内进行访问。public
修饰符允许从任何位置访问。