Angular组件中Owner类型属性未初始化报错如何解决?
报错原因
这个报错是TypeScript开启strictPropertyInitialization(严格属性初始化)检查规则导致的,该规则要求类的所有属性必须在构造函数执行结束前完成赋值,或者在声明时给出初始值。你当前的owner属性只声明了类型,没有初始值,也没有在构造函数中赋值,因此触发校验报错。
可行解决方案(均满足不初始化为undefined的要求)
方案1:使用非空断言操作符(!)声明属性
如果你可以保证在组件使用owner属性前,一定会通过接口请求完成赋值,可以在声明属性时添加!后缀,主动告知TypeScript该属性一定不会为空,跳过校验。
代码修改如下:// 仅需修改owner属性声明行即可 public owner!: Owner;这个方案改动最小,适合绝大多数异步请求获取数据的组件场景。
注意:使用该方案时,建议在模板中访问
owner相关属性前添加*ngIf="owner"判断,避免接口请求未完成时模板访问空属性抛出运行时错误。方案2:初始化空的Owner默认值
如果你希望属性始终有有效值,不需要后续做空判断,可以在声明时给一个符合Owner接口结构的默认初始值:public owner: Owner = { id: '', name: '', dateOfBirth: '', address: '' };后续接口请求返回数据后会自动覆盖这个默认值,不会出现undefined的情况。
方案3:(非必要不推荐)关闭严格属性初始化检查
如果项目中存在大量类似的异步赋值属性场景,可以修改项目根目录的tsconfig.json配置,关闭全局的严格属性初始化校验:{ "compilerOptions": { "strictPropertyInitialization": false } }该方案会全局关闭校验,降低类型安全性,仅建议在确认项目不需要该规则时使用。
内容的提问来源于stack exchange,提问作者DevError404
相关产品推荐
相关产品推荐

