【问题标题】:Angular 2 Interface property mappingAngular 2 接口属性映射
【发布时间】:2016-12-15 16:17:10
【问题描述】:

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

我发现的一个问题是我的接口属性定义必须与 json 属性完全匹配。 IE;如果 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对象,有什么好处呢?

提前致谢。

【问题讨论】:

    标签: angular interface observable


    【解决方案1】:

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

    一般来说,TypeScript 中的强制转换机制来验证任何对象是否遵循提供的约定(接口/类)。你可以使用类,但如果你的类/接口声明了方法,则提供的对象必须实现所有这些(你绝对不能用 JSON 做),否则 TypeScript 编译器不允许你转换......将任何 Object 转换为 Class 的技术(即使用构造函数、setter、转换器扩展 Class Instance with Object)。

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

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

    使用类似于 JPA Domains 的方式为每个接口/类属性分配别名列表可能是个好主意,但大多数时候 API 更改不那么频繁,而且您可以找到大量 JSON 到 TypeScript 接口的在线生成器。

    【讨论】:

    • A.蒂姆:感谢您的回复。很抱歉将其标记为 Angular,我对 Angular 和 Typescript 很陌生。我将继续标记为 Typescript 的问题
    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多