TypeScript Getter 和 Setter

注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。


TypeScript 的 getter 和 setter 是特殊方法,它们提供对对象属性的可控访问。

  • Getter 允许我们将private属性像普通字段一样读取。
  • Setter 允许我们在为字段赋值时添加自定义逻辑。

对象属性的类型

在 TypeScript 中,对象属性可以通过两种方式访问。

  • 数据属性:它们直接保存值。
  • 访问器属性:它们是我们用于访问或修改值的get()set()方法。

数据属性

TypeScript 数据属性是对象中直接保存值的键值对。它可以存储任何类型的数据,例如字符串、数字、对象或函数。

例如,

class Student {

  // Data property
  private _firstName: string = "Monica";
}

访问器属性

在 TypeScript 中,访问器属性是用于获取或设置对象值的方。这些是通过getset关键字定义的。

  • get:用于定义 getter 方法以获取属性值。
  • set:用于定义 setter 方法以设置属性值。

TypeScript Getter

在 TypeScript 中,getter 方法用于以可控的方式访问类的(通常是私有的)属性。例如,

class Student {
  // Data property
  private _firstName: string = "Monica";

// Getter method get getName(): string { return this._firstName; } }
const student = new Student(); // Accessing the getter console.log(student.getName);

输出

Monica

在上面的程序中,创建了一个 getter 方法 getName() 来访问对象的属性。

get getName() {
    return this._firstName;
}

注意:要创建 getter 方法,请使用 get 关键字。

并且在访问值时,我们将其视为一个属性来访问。

student.getName;

常见错误

访问私有数据属性

在前面的示例中,直接尝试访问私有属性会引发错误。例如,

console.log(student._firstName);

发生这种情况是因为 _firstName 被标记为 private,这意味着它只能在类内部访问,而不能从外部访问。

将 Getter 视为方法进行访问

另一个常见的错误是将 getter 像函数一样调用。例如,

console.log(student.getName());

在这里,getName 是一个 getter,而不是一个方法。所以它应该像一个普通属性一样被访问,无需括号。

console.log(student.getName);

TypeScript Setter

在 TypeScript 中,setter 方法用于更新类属性的值。例如,

class Student {
  private _firstName: string = 'Monica';

  // Getter method
  get firstName(): string {
    return this._firstName;
  }

// Setter method set changeName(newName: string) { this._firstName = newName; } }
const student = new Student(); console.log(student.firstName); // Monica // Change(set) object property using a setter student.changeName = 'Sarah'; console.log(student.firstName); // Sarah

在上面的示例中,setter 方法用于更改对象的值。

set changeName(newName: string) {
    this._firstName = newName;
}

注意:要创建 setter 方法,请使用 set 关键字。

如上程序所示,firstName 的值为 Monica

然后值更改为 Sarah

student.changeName = 'Sarah';

注意:Setter 必须有且仅有一个形式参数。


示例:TypeScript Getter 和 Setter

现在,让我们编写一个包含 getter 和 setter 方法的独立程序。我们还将实现 setter 方法中的一些自定义逻辑。

// Define a class named 'Person'
class Person {
  private _name = "";
  private _age = 0;

  // Getter for 'name'
  get name() {
    return this._name;
  }

  // Setter for 'name' - converts any value to string
  set name(value: string | number | boolean) {
    this._name = String(value);
  }

  // Getter for 'age'
  get age() {
    return this._age;
  }

  // Setter for 'age' - converts to number, uses 0 if invalid
  set age(value: string | number | boolean) {
    const num = Number(value);
    this._age = Number.isFinite(num) ? num : 0;
  }
}

const person = new Person();
person.name = "Alice";
person.age = "30";
console.log(person.name); 
console.log(person.age);

输出

Alice
30

这里,Person 类有两个数据属性:_name_age。因此,我们创建了它们各自的 getter 和 setter 方法。

我们在 setter 方法中实现了以下逻辑:

  • name() - 此 setter 使用 String() 方法将参数转换为字符串类型,并将其赋值给 _name 属性。
  • age() - 此 setter 使用 Number() 方法将参数转换为数字类型,并将其赋值给 _age 属性。如果参数无效,则将 _age 设置为 0

阅读更多

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战