【问题标题】:Whats the easiest way to create a TypeScript object with JSON as input?使用 JSON 作为输入创建 TypeScript 对象的最简单方法是什么?
【发布时间】:2017-02-19 22:04:40
【问题描述】:

在 Angular2 (TypeScript) 中,我有一个具有以下构造函数的类:

 export class DataModel {
    constructor(public date_of_visit: string,
                public gender: boolean,
                public year_of_birth: number,
                public height: number,
                public weight: number){}
 }

我有以下 JSON 对象:

json = {"date_of_visit": "23/09/2016", "gender": 1, "year_of_birth": 1975, "height":185, "weight": 85}

问题:使用 JSON 数据作为输入创建 DataModel 实例的最简单方法是什么?类似new DataModel(**json)

【问题讨论】:

标签: json angular typescript


【解决方案1】:

对于编译时强制转换,可以这样做:

let dataModel = {"date_of_visit": "23/09/2016", "gender": 1, "year_of_birth": 1975, "height":185, "weight": 85} as DataModel;

【讨论】:

  • 仅供参考,这是一个类型-断言,它是一个编译时构造,而不是一个类型-cast,这将是一个运行时构造。这实际上意味着通过解析 JSON 创建的对象在运行时将是 Object 实例,而不是 DataModel 实例。只要您不使用 instanceof 或定义方法、getter、setter 或解析后的 JSON 本身不存在的任何内容,这很好。
  • 感谢您澄清@JohnWhite。我认为我正在寻找的答案是类型转换,因为我需要调用 DataModel 的方法。你能举个例子吗?
  • 我想我在这里找到了答案:stackoverflow.com/questions/32167593/…
  • IMO,目前这在 TypeScript 中是完全未知的。没有标准化的方法来进行实际的类型转换,这可以归功于 TypeScript 相对年轻的时代,其目标之一是最大限度地减少任何运行时开销。但是,我开始着手进行一个实验项目,TypedJSON,它完全符合您的要求:从 JSON 创建一个用户定义的类实例。它有其局限性,但它对于一般用途来说是可靠的,而且它的语法非常轻量级。我可以用它发布答案。
  • 我会看看你的项目,谢谢你的指导。
【解决方案2】:

选角应该可以帮助您完成:

let model: DataModel = {"date_of_visit": "23/09/2016", "gender": 1, "year_of_birth": 1975, "height":185, "weight": 85} as DataModel;

【讨论】:

  • 值得注意的是,进行类型断言的首选方式是obj as Type
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2017-04-05
  • 2014-01-28
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多