提问者:小点点

如何将JSON对象强制转换为typescript类


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

我不想填充一个typescript var(即有一个接受这个JSON对象的构造函数)。它很大,并且一个子对象一个子对象地复制所有内容&;一个财产一个财产要花很多时间。

更新:你可以将它转换为一个typescript接口!


共3个答案

匿名用户

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

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

复制数据的一些例子:

  1. 将AJAX JSON对象复制到现有对象
  2. 将JSON字符串解析为JavaScript中的特定对象原型

本质上,你只是:

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可以包含更多的属性,但形状满足接口的条件。

我希望能帮上忙!