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

为何获取Set类型personList的size属性时返回undefined?

问题原因与解决方案

你的问题核心在于接口返回的是普通JSON对象,并非你定义的Person类实例:

  • 后端返回的personList是数组类型,但你在Person类里声明的是Set<Address>
  • JSON反序列化不会自动把数组转换成Set,所以response.personList本质还是数组,数组只有length属性,没有size,这就是size返回undefined的原因

解决办法

方法1:直接处理数组(快速临时方案)

如果只是需要获取元素数量,直接用数组的length即可;要是必须用Set,手动做类型转换:

this.personService.getPersonInfo(this.personId).subscribe((res => {
    let response = res.body;
    // 直接用数组长度
    let num = response.personList.length;
    // 或者转成Set后取size
    const personSet = new Set(response.personList);
    num = personSet.size;
    ...
}))

方法2:规范实例化Person类(长期维护方案)

给Person类添加构造函数,把响应的数组数据转换成Set:

export class Person {
  personExists: boolean;
  personList: Set<Address> = new Set<Address>();

  constructor(data: { personExists: boolean; personList: Address[] }) {
    this.personExists = data.personExists;
    // 将传入的数组转为Set
    this.personList = new Set(data.personList);
  }
}

之后在订阅时创建Person实例,就能正常访问size属性了:

this.personService.getPersonInfo(this.personId).subscribe((res => {
    const person = new Person(res.body);
    let num = person.personList.size;
    ...
}))

补充说明

JSON仅处理纯数据对象,不会自动实例化你的自定义类,所以类里默认初始化的new Set<Address>()不会触发,必须手动将后端返回的数组转换成Set类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:07:02