Angular 2接口属性映射

时间:2016-12-15 16:17:11

标签: angular interface observable

请有人帮我理解这一点。我从Angular 2学到的教程演示了使用一个接口来通过Observable存储日期。即:.map((响应:响应)=> response.json())。

我发现的一个问题是我的接口属性定义必须与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',则地图将在客户编号上失败。有没有解决这个问题。另外,为什么使用接口vs类来映射json对象,有什么好处呢?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

通常,它是TypeScript中的强制转换机制,用于验证任何Object是否遵循提供的约定(接口/类)。你可以使用Classes,但是如果你的类/接口声明了Methods,那么Object必须实现所有这些(你绝对不能用JSON做),否则TypeScript编译器不允许你进行转换......将任何Object转换为Class的技术数量(即使用构造函数,setter,转换器扩展Class实例,使用构造函数,setter,转换器)。

当然,您可以避免使用类/接口,只使用any类型...

是的,没有内置方法来使用不同的名称来转换属性,除非你实现/ find实现,这可能是另一个Converter / Factory。

与JPA Domains类似的方式为每个Interface / Class属性分配别名列表可能是个好主意,但是大多数情况下API更改不那么频繁,而且你可以找到大量的JSON到TypeScript接口在线生成器。 / p>