数组属性的打字稿获取器/设置器

问题描述

是否可以使用getter / setter模式获得数组属性

例如:

export class User {

  private _name: string;

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

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

  private _roles = new Array<string>();

  set roles(value: Array<string>) {
    this._roles = value;
  }

  get roles(): Array<string> {
    return this._roles;
  }

  constructor() {
  }
}

虽然更改user.name会触发setter方法,但不会添加删除角色中的项目。

现在,我想我明白为什么它不触发setter的原因,因为向数组中添加项目不会更改指针,而只会增加已分配的空间(如果我错了,请纠正我)。

如何在数组属性上获得所需的getter / setter行为?

解决方法

正如您所说,做类似user.roles.push('my-role')的事情只会使现有数组发生突变。可以通过添加rolesaddRole之类的方法来代替通过removeRole设置器直接访问数组。然后,您可以实现在向roles数组添加或删除数组时所需的任何逻辑,使其完全私有。