返回

TypeScript 中的私有和公共属性以及静态方法

前端

TypeScript 是一种强大的编程语言,它可以帮助我们构建健壮可靠的应用程序。TypeScript 提供了丰富的语言特性,其中包括类、接口、泛型、模块等。TypeScript 还支持访问控制,我们可以使用 private、public 和 static 来控制属性和方法的访问权限。

类和实例化

在 TypeScript 中,我们可以使用 class 关键字来定义类。类是对象的蓝图,它定义了对象的属性和方法。我们可以使用 new 关键字来实例化类,实例化后我们就可以访问类的属性和方法。

class Person {
  // 私有属性
  private name: string;

  // 公有属性
  public age: number;

  // 静态属性
  static count: number = 0;

  // 构造函数
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;

    // 增加计数
    Person.count++;
  }

  // 私有方法
  private greet() {
    console.log(`Hello, my name is ${this.name}!`);
  }

  // 公有方法
  public sayAge() {
    console.log(`I am ${this.age} years old!`);
  }

  // 静态方法
  static getCount() {
    console.log(`The number of instances of the Person class is ${Person.count}`);
  }
}

私有属性和方法

私有属性和方法只能在类的内部访问。这意味着我们不能在类的外部直接访问私有属性和方法。例如,在上面的代码中,name 属性是私有的,我们不能在类的外部直接访问 name 属性。如果我们尝试在类的外部访问 name 属性,将会得到一个错误。

// 报错:无法访问私有属性
console.log(new Person('John Doe', 30).name);

私有属性和方法通常用于封装类的内部状态。例如,在上面的代码中,name 属性是私有的,这可以防止外部代码意外修改 name 属性的值。

公有属性和方法

公有属性和方法可以在类的内部和外部访问。这意味着我们可以直接访问类的公有属性和方法。例如,在上面的代码中,age 属性是公有的,我们可以直接访问 age 属性。

console.log(new Person('John Doe', 30).age); // 30

公有属性和方法通常用于暴露类的公共接口。例如,在上面的代码中,age 属性是公有的,这允许外部代码直接访问 age 属性的值。

静态属性和方法

静态属性和方法属于类本身,而不是类的实例。这意味着我们不能在类的实例上访问静态属性和方法。例如,在上面的代码中,count 属性是静态的,我们不能在类的实例上访问 count 属性。如果我们尝试在类的实例上访问 count 属性,将会得到一个错误。

// 报错:无法访问静态属性
console.log(new Person('John Doe', 30).count);

静态属性和方法通常用于存储与类相关的数据或提供与类相关的功能。例如,在上面的代码中,count 属性是静态的,它存储了类的实例数。

总结

在 TypeScript 中,我们可以使用 private、public 和 static 关键字来控制属性和方法的访问权限。private 关键字表示该属性或方法只能在类的内部访问,public 关键字表示该属性或方法可以在类的内部和外部访问,static 关键字表示该属性或方法属于类本身,而不是类的实例。