如何在TypeScript中动态创建嵌套对象及对象属性?
报错原因
你只初始化了最外层的account空对象,account.documents属性未被定义,默认值为undefined,直接访问undefined下的bank_account_ownership_verification属性就会触发该类型错误。
注意:ES6+提供的可选链语法仅支持属性读取场景,不能用在赋值表达式的左侧,所以赋值时依然需要保证中间层级的属性已被初始化
解决方案
- 方案1:一次性初始化完整对象结构(最推荐)
const account = { documents: { bank_account_ownership_verification: { files: this.file.value } } };
- 方案2:逐层初始化嵌套属性后再赋值
如果需要分步给对象赋值,必须逐层初始化中间层级的属性,不能跳级访问:
const account: any = {}; // 初始化第一层嵌套属性 account.documents = {}; // 初始化第二层嵌套属性 account.documents.bank_account_ownership_verification = {}; // 最终给目标属性赋值 account.documents.bank_account_ownership_verification.files = this.file.value;
- 方案3:使用工具方法简化深层赋值
如果嵌套层级很深,可以用Lodash的_.set方法,会自动创建不存在的中间层级:
import _ from 'lodash'; const account: any = {}; _.set(account, 'documents.bank_account_ownership_verification.files', this.file.value);
额外优化建议
尽量避免用any类型,提前定义好对象的TS接口,可以在编译阶段就发现未初始化的属性问题,避免运行时报错:
// 按实际业务场景调整属性和类型定义 interface Account { documents?: { bank_account_ownership_verification?: { files?: File[] } } } const account: Account = {};
内容的提问来源于stack exchange,提问作者chuckd
相关产品推荐
相关产品推荐

