Typescript 4.1.5扩展运算符更新MyType类型数组元素异常如何解决
问题根因
- 混用了对象和数组的扩展运算符语法:
{...aList}是对象扩展写法,用于数组时会将其转为以索引为键、元素为值的普通对象,此时插入B会给对象新增名为B的属性,和aList的数组类型完全不匹配,自然会报错或出现非预期的新增元素行为。数组的扩展运算符应使用[...数组变量]格式。 - 未明确数组元素的更新逻辑:你当前的写法是将
B作为独立成员插入结构,而非合并到数组内已有的MyType类型元素中。
对应解决方案
如果你的aList初始化后仅包含1个元素(和你给出的初始化代码逻辑一致),直接合并首个元素和B即可:
this.aList = [ { ...aList[0], ...(B as MyType) } ]
如果你需要更新数组中指定索引index位置的元素,无需手动遍历,可通过slice方法拆分数组实现更新:
this.aList = [ ...aList.slice(0, index), { ...aList[index], ...(B as MyType) }, ...aList.slice(index + 1) ]
注意:因为你提到实际场景中
B是any类型的$event,增加as MyType类型断言可以避免类型报错,建议提前确认B的结构符合key为字符串、value为布尔值的规则,避免运行时出现非预期值。
内容的提问来源于stack exchange,提问作者wwa23
相关产品推荐
相关产品推荐

