如何通过 TypeScript 中的封装来保护和排列不被更改?

How do protect and array from being altered via encapsulation in TypeScript?

考虑以下代码:

class Customers {
  private _list: Array<Person>;

  constructor() {
    this._list = [];
  }

  public get customerList(): Array<Person> {
    return this._list;
  }
}

鉴于该代码,似乎没有任何方法可以阻止消费者以我可能不喜欢的方式更改 customerList 数组。例如,消费者可以调用

myCustomer.customerList.slice(1, 2);

并删除没有 "permission" 的客户。

在其他语言中,我会将列表公开为 IEnumerable<T>,然后根据需要提供特定的删除方法。

如何在 TypeScript 中正确封装和保护 'customerList()' 属性?

(非常高兴地承认我正在以完全错误的方式解决这个问题......)

TypeScript's ReadonlyArray<T> 正是您要找的。该接口可防止客户端代码更改数组。