【发布时间】:2020-05-28 12:14:10
【问题描述】:
我最近将我的项目从 Typescript 3.5 更新到 3.8。 一切运行顺利,期待对数组进行一些操作。
const usedROI = this.rois.find((roi) => roi.id === roiId);
usedROI.position.height = position.height;
错误类型错误:无法分配给对象“[object Object]”的只读属性“height”
let rerouteWaypoint = route.waypoints.filter((wp) => wp.type === IWaypointType.REROUTE_POINT);
rerouteWaypoint.forEach((wp) => (wp.type = IWaypointType.USER_POINT));
错误类型错误:无法分配给对象“[对象数组]”的只读属性“类型”
const wps = state.entities[action.payload.routeId].waypoints;
const wp = {
...wps[index],
...action.payload.changes,
};
wps[index] = { ...wp }; <= this line breaks
core.js:4117 ERROR TypeError: 无法分配给对象“[object Array]”的只读属性“0”
我没有在我的应用程序的任何地方使用只读,看起来我的所有数组都被冻结且不可编辑。
为什么会这样?我在重大变化中看不到它。有没有办法在视觉代码中找到发生此问题的所有位置?因为现在只在运行时弹出错误,部署这样的版本真的很不安全。
编辑:有人在这里谈论类似的问题 => Error while sorting array of objects Cannot assign to read only property '2' of object '[object Array]'
但我不明白为什么简单的数组也会在没有使用 redux 存储元素的情况下抛出它。
【问题讨论】:
-
由于这是一个运行时错误,而不是编译时错误,听起来这与您在更新 TypeScript 的同时更新的 else 内容有关。您从中获取对象的东西已经密封或冻结了它不习惯的对象(可能是因为它们总是应该是只读的,但它的早期版本并没有强制执行)。
-
“有没有办法在可视代码中找到所有出现此问题的位置?” 是的。一旦您知道哪些对象被密封或冻结,您就可以更新您正在使用的类型信息,以说明它们的属性是只读的。然后 TypeScript 将捕获您分配给它们的任何位置。 (前提是您没有使用类型断言或
any等来选择退出 TypeScript 的输入位置。) -
我会调查一下谢谢
-
看起来所有抛出错误的东西都与ngrx有些关联,就像我从选择器中得到的值一样。但没有办法将它们键入为只读
-
@T.J.Crowder 我发现了,谢谢你的帮助
标签: typescript