跳到主要内容

TypeScript 访问修饰符

摘要:在本教程中,你将了解 TypeScript 中的访问修饰符,包括 privateprotectedpublic

访问修饰符改变类的属性和方法的可见性。 TypeScript 提供了三种访问修饰符:

  • private
  • protected
  • public

请注意,TypeScript 是在编译时(而不是运行时)控制可见性。

private 修饰符

private 修饰符把可见性限制于同一类的内部。 当你将 private 修饰符添加到属性或方法时,可以在同一类中访问该属性或方法。 任何在类的外部尝试访问私有属性或方法都将导致编译时错误。

以下示例演示如何对 Person 类的 snnfirstNamelastName 属性使用 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 为类属性和方法提供了三种访问修饰符:privateprotectedpublic
  • private 修饰符允许在同一个类中进行访问。
  • protected 修饰符允许在同一类和子类内进行访问。
  • public 修饰符允许从任何位置访问。