无法理解 Angular 如何将 json 映射到对象

unable to understand how Angular maps a json to an object

我正在向 Angular 客户发送以下 json

{
result:"success"
additional-info:"something"
}

我正在将上面的 json 映射到下面的对象 class

export class ServerResponseAPI{ //should this be an interface?
  constructor ( public result:string,
               public additionalInformation:string){
  }
} 

例如。 let jsonResponse:ServerResponseAPI = res.body

当我尝试访问 jsonResponse.additionalInformation 键时,我得到的错误是 undefined。我想这是因为 javascript 将 json 转换为带有键 resultadditional-infoobject(我们称它为 jsonObject 并且当这个对象被分配给 ServerResponseAPI 类型的对象(我们称之为 apiObject),additional-info 由于名称不同而没有映射到 additionalInformation。我更正了代码如下和有效

export class ServerResponseAPI{
  'additional-info':string;
  constructor ( public result:string,
               public additionalInformation:string){
    this['additional-info'] = additionalInformation;
  }
}

但是我不太明白为什么初始代码不起作用而后一个代码起作用了。如果 Angular 创建具有两个属性的 apiObject - resultadditionalInformation 并注意到 jsonObject 没有 additionalInformation 属性 , 它保持 additionalInformation undefined。那为什么 this['additional-info']=additionalInformation 不也使 additional-info undefined

据我所知,Angular 和 Typescript 是 Angular 将您的 JSON 解析为对象,然后 Typescript 进行验证。

问题是当您工作时 类 您需要使用 new 关键字创建新实例。

Typescript 中的接口对于编码时的类型验证很有用(它们不会在你的编译代码中添加额外的代码),它们非常适合这种场景,它提供了一种方式 "defining" 将从您的 API.

返回的对象的结构

界面是这样使用的:

let jsonResponse:ServerResponseAPI = res.body

这是 Class 的用法:

let jsonResponse = new ServerResponseAPI(res.body.result, res.body['additional-info'])

使用接口可以直接从对象映射类型。

希望对您有所帮助