📜  TypeScript 中私有关键字和私有字段的区别(1)

📅  最后修改于: 2023-12-03 15:05:39.518000             🧑  作者: Mango

TypeScript 中私有关键字和私有字段的区别

在 TypeScript 中,我们可以使用 private 关键字来声明私有成员,包括私有字段和私有方法。本文将介绍私有关键字和私有字段的区别以及如何在 TypeScript 中使用它们。

私有关键字 (private)

私有关键字 private 用于限制类成员的访问范围。被声明为 private 的成员只能在声明它们的类中访问,而不能在类的外部或派生类中访问。它可以应用于类的属性、方法和构造函数。

以下是 private 关键字的一些特点:

  • 私有成员只能在声明它们的类中访问。
  • 私有成员不能被类的实例直接访问。
  • 私有成员可以在类的内部被访问和修改。
  • 私有成员即使是在派生类中也无法访问。

下面是一个示例,演示了如何使用 private 关键字声明私有成员:

class MyClass {
  private privateField: string;
  private constructor(privateParameter: string) {
    this.privateField = privateParameter;
  }

  private privateMethod() {
    console.log('This is a private method');
  }

  public publicMethod() {
    console.log('This is a public method');
    this.privateMethod();
  }
}

在上面的示例中,privateFieldprivateMethod 被声明为私有成员。它们只能在 MyClass 类的内部访问,无法从外部或派生类中访问。

私有字段 (Private Fields)

私有字段是 TypeScript 3.8 引入的一项新特性,用于声明类的私有成员变量。与 private 关键字不同,私有字段可以在类的外部使用访问器方法来访问和修改。

以下是私有字段的一些特点:

  • 私有字段用 # 符号作为前缀来声明。
  • 私有字段可以通过访问器方法来访问和修改。
  • 私有字段可以在类的方法中直接访问和修改。

下面是一个示例,演示了如何使用私有字段:

class MyClass {
  #privateField: string;

  constructor(privateParameter: string) {
    this.#privateField = privateParameter;
  }

  get privateField() {
    return this.#privateField;
  }

  set privateField(value: string) {
    this.#privateField = value;
  }

  publicMethod() {
    console.log('This is a public method');
    console.log('Private field:', this.#privateField);
  }
}

在上面的示例中,#privateField 被声明为私有字段。可以使用 getset 访问器方法来访问和修改私有字段的值。同时,publicMethod 方法可以直接访问和输出私有字段的值。

总结

私有关键字 private 用于限制类成员的访问范围,只能在声明它们的类中访问。私有字段是 TypeScript 3.8 中新增的一项特性,允许在类的外部通过访问器方法来访问和修改私有成员变量。两者的区别在于访问的方式和范围不同。

通过使用私有关键字和私有字段,我们可以更好地控制类的封装性,提高代码的安全性和可维护性。