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

Angular中给DocumentModel赋值报Cannot set properties of undefined错误如何解决

错误产生原因
  • 仅声明类型未初始化实例:TypeScript的类型标注仅在编译阶段做类型校验,不会为变量自动生成对应实例。你只给documentsArray标注了DocumentModel类型,没有实际赋值,运行时该变量的值为undefined,对undefined的filename属性赋值自然会触发该错误。
  • 类型定义与实际使用逻辑不符:变量名带有Array后缀,且代码中存在this.documentsArray[0]的数组下标访问操作,但你声明的类型是单个DocumentModel对象而非DocumentModel[]数组,存在逻辑冲突。
解决方法

场景1:业务需要单个DocumentModel对象

首先在变量声明阶段完成初始化:
如果DocumentModel是接口类型,使用类型断言初始化:

documentsArray: DocumentModel = {} as DocumentModel;

如果DocumentModel是类类型,直接实例化:

documentsArray: DocumentModel = new DocumentModel();

修改后即可正常对documentsArray的属性赋值。

场景2:业务需要DocumentModel数组存储多份文件数据

先修正变量的类型定义并初始化空数组:

documentsArray: DocumentModel[] = [];

修改上传方法,每次上传时创建新的DocumentModel实例再存入数组:

uploadFile(files: FileList | null): void {
  if(files){
    const file = files.item(0)
    const reader = new FileReader()
    reader.readAsDataURL(file)
    reader.onload = () => {
      // 新建实例赋值
      const newDoc: DocumentModel = {} as DocumentModel;
      newDoc.filename = file.name;
      // 按需补充其他字段赋值
      this.documentsArray.push(newDoc);

      this.api.saveDocument({body: newDoc}).subscribe({
        next: data => console.log(data),
        error: error => console.log("your error: " + error)
      })
      console.log(this.documentsArray[0])
      console.log(JSON.stringify(this.documentsArray))
    }
  }
}

内容的提问来源于stack exchange,提问作者natyus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:24:05