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

Angular TypeScript中如何将字符串数组存入Accessright对象数组?

问题分析与解决方案

看起来你现在的核心问题是没把选中的entityName字符串正确转换成Accessright类型对象,反而直接把整个字符串数组往accessRights里塞,导致类型不匹配。另外之前直接给this.accessRights[i].entityName赋值的写法无效,大概率是因为accessRights数组没有预先初始化对应索引的Accessright对象。

正确的实现方式

你需要逐个为选中的页面创建Accessright对象,再把这些对象添加到accessRights数组中,而不是直接操作字符串数组。结合你给出的Accessright结构,代码可以这么写:

// 先清空原有的accessRights数组(如果需要重置的话)
this.accessRights = [];

// 循环遍历选中的页面,创建Accessright对象并添加到数组
this.selectedPages.forEach((page, index) => {
  // 创建符合Accessright类型的对象,填充必要属性
  const newAccessRight: Accessright = {
    accessRightId: index, // 可根据需求设置ID,比如自增或后端返回值
    entityName: page.entityName,
    entityAttribute: [], // 按你的示例是数组类型,默认设为空数组或对应值
    // 若有其他必填属性,记得一并补上
  };
  this.accessRights.push(newAccessRight);
});

为什么之前的写法会出错?

  1. this.accessRights.push(this.selectedAccessRights)的问题:
    push方法是往数组里添加单个元素,你把整个String[]类型的数组作为一个元素传进去,自然会和Accessright类型不匹配,所以报错说String[]缺少Accessright的必要属性。

  2. this.accessRights[i].entityName = ...的问题:
    如果accessRights数组在循环前没有初始化足够长度的Accessright对象,this.accessRights[i]很可能是undefined,直接赋值会报错;就算数组有长度,也可能因为没提前创建对象实例,只有最后一次循环的赋值生效。

补充说明

如果你的Accessright是类而非接口,需要用new关键字创建实例:

const newAccessRight = new Accessright();
newAccessRight.accessRightId = index;
newAccessRight.entityName = page.entityName;
newAccessRight.entityAttribute = [];
this.accessRights.push(newAccessRight);

这样就能保证每个元素都是符合类型要求的Accessright对象,后端服务也能正确接收了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:14