我有一个名为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对象的设置值
谢谢
答案 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
类型}}