我发送以下 json
给 Angular
客户端
{
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
转换为带有 result
和 additional-info
的 object
(让我们称之为 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
- result
和 additionalInformation
,并且 jsonObject
没有 additionalInformation
属性的通知,则保留 additionalInformation
undefined
. 那么为什么 this['additional-info']=additionalInformation
也没 additional-info
undefined
?
1 回答
据我所知,Angular和Typescript是Angular将你的JSON解析为一个对象,而Typescript进行验证 .
问题在于,当您在工作类时,您需要使用
new
关键字创建新实例 .Typescript中的接口对于编码时间中的类型验证非常有用(它们不会为编译的代码添加额外的代码),它们是这种情况的理想选择,它提供了一种“定义”对象结构的方法 . 将从您的API返回 .
这是接口的使用方式:
let jsonResponse:ServerResponseAPI = res.body
这是使用类的方式:
let jsonResponse = new ServerResponseAPI(res.body.result, res.body['additional-info'])
使用该界面可以直接从对象映射类型 .
希望能帮助到你