请有人帮我理解这一点。我从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对象,有什么好处呢?
提前致谢。
答案 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>