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