我从远程REST服务器读取了一个JSON对象。这个JSON对象具有typescript类的所有属性(根据设计)。如何将接收到JSON对象转换为类型var?
我不想填充一个typescript变量(即有一个接受这个JSON对象的构造函数)。它很大,并且逐个子对象地复制所有内容&逐个属性地复制所有内容将花费大量时间。
发布于 2014-04-05 10:44:11
您不能简单地将来自Ajax请求的普通旧式JavaScript结果转换为原型JavaScript/TypeScript类实例。有许多技术可以做到这一点,通常涉及复制数据。除非创建类的实例,否则它不会有任何方法或属性。它仍然是一个简单的JavaScript对象。
如果您只处理数据,则可以仅对接口进行强制转换(因为它纯粹是一个编译时结构),这将要求您使用一个使用数据实例并对该数据执行操作的TypeScript类。
复制数据的一些示例:
本质上,你只需要:
var d = new MyRichObject();
d.copyInto(jsonResult);
发布于 2016-10-14 19:39:44
我也遇到了同样的问题,我找到了一个可以完成这项工作的库:https://github.com/pleerock/class-transformer。
它是这样工作的:
let jsonObject = response.json() as Object;
let fooInstance = plainToClass(Models.Foo, jsonObject);
return fooInstance;
它支持嵌套的子类,但您必须修饰类的成员。
发布于 2014-08-15 10:21:58
在TypeScript中,您可以使用接口和泛型执行type assertion,如下所示:
var json = Utilities.JSONLoader.loadFromFile("../docs/location_map.json");
var locations: Array<ILocationMap> = JSON.parse(json).location;
其中ILocationMap描述了数据的形状。这种方法的优点是,您的JSON可以包含更多的属性,但形状满足接口的条件。
但是,这不会添加类实例方法。
https://stackoverflow.com/questions/22875636
复制相似问题