javascript - 尝试更新我的对象中的 bool 属性的 Typescript 收到 "TypeError: Cannot assign to read only property"

标签 javascript typescript

如果我有已经定义的对象,如何更改属性的值?我还有其他选择吗?

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: Cannot assign to read only property 'shouldChange' of object '[object Object]'

最佳答案

我不确定此代码是否在 NGRX 上下文中使用,但无论如何,请考虑尝试以下操作:

testObj = {...testObj};

在 NGRX 上下文中,您从存储中获取的数据处于卡住状态并且是只读的。使用此代码(它是扩展运算符,相当于 testObj = Object.Assign({}, testObj) ),您基本上创建了一个与之前的 testObj 看起来相同的全新对象。 。唯一的区别是,该对象没有卡住状态,可以自由调整。

如果您有更深的对象并且需要调整这些对象,则必须使用 cloneDeep来自洛达什

export interface myTest {
    shouldChange: boolean;
    somethingElse: DeepObject;
}

export class DeepObject {
    index: number;
}

testObj = _.cloneDeep(testObj);
testObj.somethingElse.index = 42; // <-- Does not throw errors

关于javascript - 尝试更新我的对象中的 bool 属性的 Typescript 收到 "TypeError: Cannot assign to read only property",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53469830/

相关文章:

Angular 过滤器在多个数组中查找字符串

javascript - 如何检测覆盖的 css 属性?

javascript - 谷歌浏览器重播 XHR 请求,但它发送时没有表单数据

javascript - 使用 wicket ajax post 将文件数组从 js 发送到 java

Angular 库未构建为 es5 目标

reactjs - typescript 和 Gatsby : Development bundle cannot resolve paths but VS Code can

javascript - 如何一个接一个地运行一个脚本?

javascript - 如何在 WebGL 中实现这种类似隧道的动画?

javascript - 一个组件的 Angular Event 发射器与另一个组件混淆

node.js - Vue.js 3 SSR - 在客户端补水期间缺少模板或渲染功能