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

Angular 5中如何根据给定JSON创建Heros.ts模型类?

搞定Angular 5的Hero模型类创建

嘿,我来帮你把这个模型类补全!先看看你提供的JSON数据结构,再一步步修正你的代码。

首先,先明确你的JSON结构:

[{ 
  "data": { "name": "adsd0 ", "lastName": "", "isNode": true }, 
  "children": [{ "data": { "name": "", "lastName": "" } }] 
}]

你现有代码的问题在于:data不是string类型,而是一个包含name、lastName、isNode的对象;另外Child类没有定义任何属性,没法匹配JSON里的子节点结构。

方案1:用接口实现(推荐,仅用于类型检查)

Angular中如果只是用来做JSON数据的类型映射,用接口足够轻量:

// 定义data字段的结构接口
export interface HeroData {
  name: string;
  lastName: string;
  isNode?: boolean; // 设为可选属性,因为子节点的data里没有这个字段
}

// 定义树节点的通用接口,Hero和Child都遵循这个结构
export interface HeroNode {
  data: HeroData;
  children?: HeroNode[]; // 可选,不是所有节点都有子节点
}

// 你的Hero类(或者直接用HeroNode接口即可)
export class Heros implements HeroNode {
  data: HeroData;
  children?: HeroNode[];
}

方案2:用类实现(适合需要添加方法的场景)

如果你的模型需要包含业务方法,就用类来定义:

// Data类,封装data字段的属性
export class HeroData {
  constructor(
    public name: string,
    public lastName: string,
    public isNode?: boolean // 可选参数
  ) {}
}

// Child类,和Hero结构一致,因为都是树节点
export class Child {
  constructor(
    public data: HeroData,
    public children?: Child[] // 可选子节点
  ) {}
}

// Heros类
export class Heros {
  constructor(
    public data: HeroData,
    public children: Child[]
  ) {}
}

如何使用?

如果是接口方案,直接把JSON数据断言成对应类型即可:

const heroJson = [{ "data": { "name": "adsd0 ", "lastName": "", "isNode": true }, "children": [{ "data": { "name": "", "lastName": "" } }] }];
const heros: Heros[] = heroJson as Heros[];

如果是类方案,需要手动实例化对象:

const heros: Heros[] = heroJson.map(item => 
  new Heros(
    new HeroData(item.data.name, item.data.lastName, item.data.isNode),
    item.children.map(child => new Child(new HeroData(child.data.name, child.data.lastName)))
  )
);

小提示:类名Heros建议改成Hero(单数形式),因为单个对象是一个英雄,数组才是Hero[],这样命名更规范哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:57