You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:12:00