Angular报Cannot set properties of undefined (setting 'key')错误咨询
报错原因
你仅给myClosureItems声明了ClosureAllItems类型,且用非空断言!告诉TypeScript该属性后续一定会被赋值,但实际没有对它做初始化操作,它的运行时值是undefined,直接对undefined执行属性赋值自然会抛出对应错误,和你定义的索引签名没有关联。
修复方案
有两种常用的修复方式:
- 方式1:声明属性时直接初始化空对象
// 用类型断言处理初始空对象和接口结构的暂时不符,后续赋值完会符合接口要求 myClosureItems: ClosureAllItems = {} as ClosureAllItems; constructor(){}
- 方式2:在
setitems方法赋值前先完成对象初始化
setitems(){ // 先初始化空对象再赋值属性 this.myClosureItems = {} as ClosureAllItems; let k:string[]=["Financials","AR2","Risk","Issue"]; k.forEach(element=>{ this.myClosureItems[element]={id:element,name:element,visibility:true} }); }
如果有严格的类型校验要求,你可以在赋值完成后增加逻辑校验ClosureAllItems中声明的所有必填固定属性都已被正确赋值,避免遗漏属性的问题。
内容的提问来源于stack exchange,提问作者Sandeep Thomas
相关产品推荐
相关产品推荐

