TypeScript 访问修饰符

摘要:在本教程中,您将学习 TypeScript 中的访问修饰符,包括 private、protected 和 public。

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

  • private
  • protected
  • public

请注意,TypeScript 在编译时在逻辑上控制访问,而不是在运行时。

private 修饰符

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

以下示例演示了如何将 private 修饰符用于 person 类的 snnfirstNamelastName 属性

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 errorCode 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 为类属性和方法提供了三个访问修饰符:privateprotectedpublic
  • private 修饰符允许在同一类中访问。
  • protected 修饰符允许在同一类及其子类中访问。
  • public 修饰符允许从任何位置访问。
  • 如果您省略访问修饰符,则属性和方法具有 public 访问权限。
本教程是否有帮助?