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

Angular *ngFor报错Property 'x' does not exist on type 'y[]'

报错根因

exple本身是由用户对象构成的数组,数组类型上不存在completeAdress属性,TypeScript类型检查会直接拦截这类非法属性访问,抛出Property 'completeAdress' does not exist on type 'y[]'错误,模板无法读取到目标地址数据,自然渲染失败。

修复方案

根据实际渲染需求二选一即可:

  • 如果你要遍历展示所有用户的所有地址,必须做两层嵌套循环:先遍历外层的用户数组exple,再遍历每个用户自身的completeAdress地址数组,参考代码:
<!-- 外层循环遍历用户,ng-container作为循环载体不会生成多余DOM节点 -->
<ng-container *ngFor="let user of exple">
  <div>用户:{{user.firstName}} {{user.lastName}}</div>
  <div *ngFor="let addr of user.completeAdress" style="margin-left: 20px;">
    城市:{{addr.city}},街区:{{addr.neighborhood}}
  </div>
</ng-container>
  • 如果你只需要展示某一个指定用户的地址,先通过数组下标拿到目标用户对象,再访问它的completeAdress属性即可,比如渲染第一个用户的所有地址:
<div *ngFor="let item of exple[0].completeAdress"> {{item.city}} </div>
可选优化(消弭TS类型提示)

建议给数据显式声明TypeScript接口,从编译阶段就拦截层级访问错误、属性拼写错误这类问题,避免运行时异常,参考写法:

// 定义嵌套数据的结构类型
interface Address {
  city: string;
  neighborhood: string;
}
interface UserInfo {
  firstName: string;
  lastName: string;
  completeAdress: Address[];
}

// 组件类中给exple标注对应类型
exple: UserInfo[] = [
  // 原有业务数据保持不变即可
  { 
    firstName: 'Msaddak',
    lastName: 'Rouabeh',
    completeAdress: [
      { city: 'Gafsa', neighborhood: 'Cité Hached Lalla' },
      { city: 'Monastir', neighborhood: 'Skanes' }
    ],
  },
  {
    firstName: 'Houssem',
    lastName: 'Ilahi',
    completeAdress: [
      { city: 'Tunis', neighborhood: 'Bardoo' },
      { city: 'Nabeul', neighborhood: 'Mrezka' }
    ],
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:45:38