2016-12-15 111 views
1

有人可以帮我理解这一点。我学习Angular 2的教程使用界面通过Observable存储日期。即:.map((response:Response)=> response.json())。Angular 2接口属性映射

我发现的一个问题是我的接口属性定义必须完全匹配json属性。即;如果json propety是_custNum,我的界面必须使用相同的确切名称_custNum。如果我将名称更改为'custNum',它将不会映射。这只是接口的规则?

示例代码:

export interface ICustSearch { 
    _custNum: string; 
    _custName: string; 
    _address: string; 
    _city: string; 
    _state: string; 
    _zip: string; 
    _county: string; 
    _phone: string; 
} 

return this._http.get(APIRoutes.custSearchLocal, {headers: headers}) 
      .map((response: Response) => <ICustSearch[]> 
         response.json()) 
      .catch(this.handleError); 

现在如果我在上面的界面更改属性“_custNum”到“custNum”地图将无法在客户数量。有没有解决这个问题的方法。另外,为什么使用接口与类来映射json对象,有什么优势?

在此先感谢。

回答

0

这两个问题都与Angular和TypeScript无关。

一般来说,它是TypeScript中的强制转换机制,用于验证任何Object遵循提供的约定(接口/类)。你可以使用类,但是如果你的类/接口已经声明了方法,提供的对象必须实现它们(你绝对不能用JSON来做),否则TypeScript编译器将不允许你进行类型转换。技术将任何对象转换为类(即使用对象,使用构造函数,设置器,转换器来扩展类实例)。

而且可以肯定你能避免类/接口和只使用any型...

是的,没有内置的方法铸有不同名称的属性,除非你执行/找到实现,这可能成为另一个转换器/工厂。

与JPA Domains方法为每个Interface/Class属性分配别名列表相似,但大部分时间API更改并不频繁,您还可以在TypeScript Interface联机生成器中找到大量的JSON。

+0

A. Tim:谢谢你的回应。对不起,将它标记为Angular,我对Angular和Typescript非常陌生。我将继续将我的问题标记为Typescript – David