返回

TS 类的访问器和装饰器

前端

在 TypeScript 中,类的访问器允许我们控制对类成员的访问。我们可以使用 getter 和 setter 方法来实现这一点。getter 方法用于获取类成员的值,而 setter 方法用于设置类成员的值。

例如,以下代码演示了如何使用 getter 和 setter 方法来控制对类成员 name 的访问:

class Person {
  private _name: string;

  constructor(name: string) {
    this._name = name;
  }

  get name(): string {
    return this._name;
  }

  set name(newName: string) {
    if (newName.length < 3) {
      throw new Error("Name must be at least 3 characters long.");
    }
    this._name = newName;
  }
}

const person = new Person("John");
console.log(person.name); // "John"

person.name = "Jane";
console.log(person.name); // "Jane"

在上面的代码中,我们首先定义了一个名为 Person 的类。该类有一个私有成员 _name,它存储着该人的姓名。然后,我们定义了一个 name getter 方法来获取该人的姓名,以及一个 name setter 方法来设置该人的姓名。

在 setter 方法中,我们检查新名称的长度是否小于 3 个字符。如果新名称的长度小于 3 个字符,则抛出一个错误。否则,我们将新名称赋给 _name

装饰器可以向类添加元数据或改变类的行为。装饰器是一个函数,它接受一个类作为参数,并返回一个新的类。

例如,以下代码演示了如何使用装饰器来向类添加元数据:

function logClass(target: Function) {
  console.log(`Class: ${target.name}`);
}

@logClass
class Person {
  // ...
}

在上面的代码中,我们首先定义了一个名为 logClass 的装饰器。该装饰器接受一个类作为参数,并在控制台输出该类的名称。

然后,我们在 Person 类上使用 @logClass 装饰器。这将导致在创建 Person 类时输出以下消息:

Class: Person

装饰器可以用于各种目的,例如:

  • 添加元数据到类
  • 改变类的行为
  • 验证类
  • 生成代码

装饰器是一个非常强大的特性,它可以用来做很多事情。但是,装饰器也可能会使代码变得难以阅读和理解。因此,在使用装饰器时,需要慎重考虑。

总的来说,访问器和装饰器都是 TypeScript 中非常有用的特性。我们可以使用访问器来控制对类成员的访问,而可以使用装饰器来向类添加元数据或改变类的行为。