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