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

如何在Angular中展示包含两种对象类型的数据数组?

解决Angular模板中区分联合类型渲染的问题

方法一:定义类型守卫函数

在组件类中添加类型守卫,让TypeScript能准确识别对象类型,模板里就能正常访问对应字段:

// 组件类中新增类型守卫方法
isCountryData(data: CountryData | ErrorData): data is CountryData {
  return (data as CountryData).caseCount !== undefined;
}

isErrorData(data: CountryData | ErrorData): data is ErrorData {
  return (data as ErrorData).errorDescription !== undefined;
}

模板中调用这些函数,结合*ngIf分支渲染不同内容:

<div *ngFor="let data of countryData | async">
  <h3>{{ data.country }}</h3>
  <!-- 渲染正常统计数据 -->
  <div *ngIf="isCountryData(data)">
    <p>病例数: {{ data.caseCount }}</p>
    <p>病例日期记录数: {{ data.caseDates.length }}</p>
  </div>
  <!-- 渲染错误提示 -->
  <div *ngIf="isErrorData(data)">
    <p class="error-text">获取数据失败: {{ data.errorDescription }}</p>
  </div>
</div>

方法二:直接在模板中判断属性存在性

如果不想额外写类型守卫,也可以直接通过属性是否存在来区分对象类型:

<div *ngFor="let data of countryData | async">
  <h3>{{ data.country }}</h3>
  <!-- 检查caseCount字段,渲染正常数据 -->
  <div *ngIf="data.caseCount !== undefined">
    <p>病例数: {{ data.caseCount }}</p>
    <p>病例日期记录数: {{ data.caseDates.length }}</p>
  </div>
  <!-- 检查errorDescription字段,渲染错误信息 -->
  <div *ngIf="data.errorDescription !== undefined">
    <p class="error-text">获取数据失败: {{ data.errorDescription }}</p>
  </div>
</div>

两种方案对比

  • 类型守卫能在编译阶段提供类型检查,避免模板中误写不存在的字段,适合复杂场景;
  • 属性存在性判断更简洁,适合简单业务场景,但字段名变动时需要同步修改模板中的判断条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:22:39