有没有人能帮我理解一下。我从Angular 2学到的教程演示了如何使用接口通过Observable存储数据。即:.map((response: Response) => response.json())。
我发现的一个问题是,我的接口属性定义必须与json属性完全匹配。如果json属性是_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对象,有什么好处?
提前谢谢。
发布于 2016-12-16 00:59:25
这两个问题都与Angular无关,而与TypeScript有关。
通常,它是TypeScript中的强制转换机制,用于验证任何对象是否遵循所提供的约定(接口/类)。你可以使用类,但是如果你的类/接口已经声明了方法,提供的对象必须实现所有这些方法(你肯定不能用JSON实现),否则TypeScript编译器不允许你强制转换...有许多技术可以将任何对象转换为Class (例如,使用构造函数、setter、转换器使用Object扩展Class实例)。
当然,您可以避免使用类/接口,而只使用any类型...
是的,没有内置的方法来转换具有不同名称的属性,除非您实现/查找实现,这可能是另一个Converter/Factory。
使用类似于JPA域的方式为每个接口/类属性分配别名列表可能是一个好主意,但是大多数时候API更改不是那么频繁,而且您可以找到大量的JSON to TypeScript接口在线生成器。
https://stackoverflow.com/questions/41168711
复制相似问题