如何禁用getter对象的设置值

时间:2018-10-23 07:18:01

标签: angular typescript

我有一个名为data的getter函数,它是一个对象,由于未设置setter,所以我只能获取值。

但是我可以在数据对象中设置值,如何禁用此功能?

dataClass.ts

BaseClass

externalClass.ts

interface dataInterface {
  test1: string;
  data: object;
}

class dataModel {
  private _data: dataInterface;
  get data(): dataInterface {
    return this._data;
  }
}

请参考上面的代码,并建议如何拒绝getter对象的设置值

谢谢

1 个答案:

答案 0 :(得分:3)

问题是,即使getter是只读的,也可以设置返回对象的值。您不是要更改存储在data中的引用,而是要更改允许的对象字段之一的值。

您可以使用Readonly映射类型来标记返回对象的所有字段都是只读的:

interface dataInterface {
  test1: string;
  data: object;
}

class dataModel {
  private _data: dataInterface;
  get data(): Readonly<dataInterface> {
    return this._data;
  }
}

class externalClass {
  testData = new dataModel()

  testing(){
    this.testData.data.test1 = "WW"; // error
  }
}

注意,如果您的嵌套结构更复杂,Readonly只会将第一级标记为只读,您可能需要按照建议的{{3}创建DeepReadonly类型}}