TypeScript 基础指南:修饰符(Modifier)

在 TypeScript 中,修饰符(Modifier)是用于控制类、属性、方法等成员访问权限的关键字。TypeScript 提供了以下几种修饰符:

public(默认)
被标记为 public 的成员可以在任何地方访问。
private
被标记为 private 的成员只能在类的内部访问。
protected
被标记为 protected 的成员可以在类及其子类中访问。
readonly
被标记为 readonly 的属性只能在构造函数中初始化,之后不能被修改。
static
被标记为 static 的成员属于类本身,而不是类的实例。

下面是一个使用这些修饰符的例子:

class Person {
  public name: string;
  private _age: number;
  protected department: string;
  readonly birthYear: number;
  static companyName: string = 'Acme Inc.';

  constructor(name: string, age: number, department: string, birthYear: number) {
    this.name = name;
    this._age = age;
    this.department = department;
    this.birthYear = birthYear;
  }

  private getAge(): number {
    return this._age;
  }

  public introduce(): void {
    console.log(`Hi, my name is ${this.name} and I'm ${this.getAge()} years old. I work in the ${this.department} department at ${Person.companyName}.`);
  }

  static getCompanyName(): string {
    return Person.companyName;
  }
}

let john = new Person('John Doe', 30, 'Engineering', 1990);
john.name; // 'John Doe' (public)
john._age; // Error: '_age' is private
john.department; // 'Engineering' (protected)
john.birthYear; // 1990 (readonly)
Person.companyName; // 'Acme Inc.' (static)
john.getAge(); // Error: 'getAge' is private
Person.getCompanyName(); // 'Acme Inc.' (static method)

在这个例子中:

1.
name 是 public 属性,可以在任何地方访问。
2.
_age 是 private 属性,只能在 Person 类内部访问。
3.
department 是 protected 属性,可以在 Person 类及其子类中访问。
4.
birthYear 是 readonly 属性,只能在构造函数中初始化。
5.
companyName 是 static 属性,属于 Person 类本身,而不是类的实例。
6.
getAge() 是 private 方法,只能在 Person 类内部调用。
7.
introduce() 是 public 方法,可以在任何地方调用。
8.
getCompanyName() 是 static 方法,属于 Person 类本身。

修饰符在 TypeScript 中非常重要,它们可以帮助开发者控制类、属性和方法的访问权限,从而提高代码的可维护性和安全性。合理使用修饰符可以确保代码遵循面向对象编程的封装原则,防止意外的访问和修改。