首页 文章

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

提问于
浏览
0

我发送以下 jsonAngular 客户端

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

我将上面的 json 映射到以下类的对象

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

1 回答

  • 0

    据我所知,Angular和Typescript是Angular将你的JSON解析为一个对象,而Typescript进行验证 .

    问题在于,当您在工作类时,您需要使用 new 关键字创建新实例 .

    Typescript中的接口对于编码时间中的类型验证非常有用(它们不会为编译的代码添加额外的代码),它们是这种情况的理想选择,它提供了一种“定义”对象结构的方法 . 将从您的API返回 .

    这是接口的使用方式:

    let jsonResponse:ServerResponseAPI = res.body

    这是使用类的方式:

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

    使用该界面可以直接从对象映射类型 .

    希望能帮助到你

相关问题