数组 属性 上的打字稿 getter / setter

typescript getter / setter on array property

数组属性有使用 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,因为将项目添加到数组不会更改指针,而只是添加到已经分配的 space(如果我纠正我我错了)。

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

正如您所说,user.roles.push('my-role') 之类的操作只会改变现有数组。您可以添加 addRoleremoveRole 等方法,而不是通过 roles-setter 直接访问数组。然后你可以在添加或删除 roles 数组时实现你需要的任何逻辑,保持它完全私有。