【问题标题】:Whats the best way to cast JSON to generic Object[] in angular 2 typescript?在 angular 2 typescript 中将 JSON 转换为通用 Object[] 的最佳方法是什么?
【发布时间】:2016-08-01 21:50:54
【问题描述】:

不确定这是否按预期工作,但我想将一团 json 转换为通用对象数组(对象具有延展性,可以根据我的 URL 进行更改)。我应该改用 JSON.parse(res.json().data) 吗?谢谢。

 return this.http.get(URL)
                       .toPromise()
                       .then(response => response.json().data as Object[]) 
                       .catch(this.handleError);
          }

【问题讨论】:

  • 不,我不知道该对象将具有哪些属性,因此打字稿类不适合我的需要。我宁愿把它转换成一个通用的 javascript 对象
  • 好吧,您可以使用as any[] 进行不安全的强制转换,但如果您在许多地方使用此功能,则值得为该响应输入一个真实类型

标签: angularjs json angular angular2-http


【解决方案1】:

您的解决方案的问题是 Object 类型没有任何成员(通常除外),因此任何尝试从您的 JSON 访问特定属性(如 id 等)都会产生错误。

正确的方式是as any[]:

  return this.http.get(URL)
                        .toPromise()
                        .then(response => response.json().data as any[]) 
                        .catch(this.handleError);
           }

这将允许您访问 JSON 响应中的所有内容(以及 JSON 响应中没有的所有内容。您将在运行时收到错误消息)。

最好将结果转换为特定类型,见How do I cast a JSON object to a typescript class

【讨论】:

  • 我设置应用程序的方式是传递两个变量来确定从后端获取哪个对象,然后从那里填充谷歌图表。我认为通用对象对于快速添加图表和插入信息来说是最简单的,使用 typescript 类是否有很大的优势,可以抵消必须创建一堆不同的 http 调用,而不是一个统一的调用?
  • 嗯,你会得到类型安全;)和在你的编辑器中自动完成。这对于大型项目更为重要。
  • 您的来电者知道该类型应该是正确的吗?您可以将此方法设为通用方法,例如 getFromServer<T>(URL_params),然后执行强制转换 as T[]。那么这个函数的返回值就是Promise<T[]>
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2015-11-21
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多