如果我已经定义了对象,如何更改属性的值?我还有其他选择吗?
export interface myTest {
shouldChange: boolean; // <-- not using readonly
}
const testObj = {
shouldChange: false
} as myTest;
// later on
testObj.shouldChange = true // <-- this throws the following error
TypeError:无法分配为只读对象'[object Object]'的属性'shouldChange'
答案 0 :(得分:0)
您可以在此处执行的一种选择是使用[]
括号访问属性,并为其指定类型any
export interface myTest {
shouldChange: boolean; // <-- readonly
}
const testObj = {
shouldChange: false
} as myTest;
testObj['shouldChange' as any] = true;
答案 1 :(得分:0)
我不确定该代码是否在NGRX上下文中使用,但是无论如何,请考虑尝试以下操作:
testObj = {...testObj};
在NGRX上下文中,您从存储中获取的数据处于冻结状态,并且是只读的。使用此代码(即传播运算符和testObj = Object.Assign({}, testObj)
的等效代码),您基本上创建了一个全新的对象,该对象看起来与先前的testObj
相同。唯一的区别是,该对象没有冻结状态,可以自由调整。
如果您有更深的物体,并且需要进行调整,则必须使用lodash中的cloneDeep
export interface myTest {
shouldChange: boolean;
somethingElse: DeepObject;
}
export class DeepObject {
index: number;
}
testObj = _.cloneDeep(testObj);
testObj.somethingElse.index = 42; // <-- Does not throw errors