发布
社区首页 >问答首页 >如何将JSON对象转换为TypeScript类?

如何将JSON对象转换为TypeScript类?
EN

Stack Overflow用户
提问于 2014-04-05 09:46:18
回答 27查看 625.4K关注 0票数 515

我从远程REST服务器读取了一个JSON对象。这个JSON对象具有typescript类的所有属性(根据设计)。如何将接收到JSON对象转换为类型var?

我不想填充一个typescript变量(即有一个接受这个JSON对象的构造函数)。它很大,并且逐个子对象地复制所有内容&逐个属性地复制所有内容将花费大量时间。

更新:尽管如此,cast it to a typescript interface!

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2014-04-05 10:44:11

您不能简单地将来自Ajax请求的普通旧式JavaScript结果转换为原型JavaScript/TypeScript类实例。有许多技术可以做到这一点,通常涉及复制数据。除非创建类的实例,否则它不会有任何方法或属性。它仍然是一个简单的JavaScript对象。

如果您只处理数据,则可以仅对接口进行强制转换(因为它纯粹是一个编译时结构),这将要求您使用一个使用数据实例并对该数据执行操作的TypeScript类。

复制数据的一些示例:

  1. Copying AJAX JSON object into existing Object
  2. Parse JSON String into a Particular Object Prototype in JavaScript

本质上,你只需要:

代码语言:javascript
代码运行次数:0
复制
var d = new MyRichObject();
d.copyInto(jsonResult);
票数 199
EN

Stack Overflow用户

发布于 2016-10-14 19:39:44

我也遇到了同样的问题,我找到了一个可以完成这项工作的库:https://github.com/pleerock/class-transformer

它是这样工作的:

代码语言:javascript
代码运行次数:0
复制
let jsonObject = response.json() as Object;
let fooInstance = plainToClass(Models.Foo, jsonObject);
return fooInstance;

它支持嵌套的子类,但您必须修饰类的成员。

票数 132
EN

Stack Overflow用户

发布于 2014-08-15 10:21:58

在TypeScript中,您可以使用接口和泛型执行type assertion,如下所示:

代码语言:javascript
代码运行次数:0
复制
var json = Utilities.JSONLoader.loadFromFile("../docs/location_map.json");
var locations: Array<ILocationMap> = JSON.parse(json).location;

其中ILocationMap描述了数据的形状。这种方法的优点是,您的JSON可以包含更多的属性,但形状满足接口的条件。

但是,这不会添加类实例方法。

票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22875636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档