Angular:打字JSON响应的Typescript作为对象模型不起作用

时间:2017-09-03 10:22:54

标签: json angular typescript casting angular2-http

当我尝试将json响应转换为object时,我遇到了一个问题,我的对象的所有属性都是字符串是正常的吗?

这是我的ajax请求:

public getSingle = (keys: any[]): Observable<Badge> => {
        return this._http.get(this.actionUrl + this.getKeysUrl(keys))
            .map((response: Response) => response.json() as Badge )
            .catch(this.handleError);
}

这是我的徽章模型:

    export interface Badge {
        badgeNumber: number;
        authorizationLevel: number;
        endOfValidity: Date;
    }

这就是我调用服务功能的地方,我正面临这个问题:

this._badgeService.getSingle(this.ids).subscribe(
      (badge: Badge) => {
        console.log(typeof(badge.endOfValidity)); // <-- returning string and not Date
      },
      error => console.log(error);
      });

1 个答案:

答案 0 :(得分:2)

这有点难以解释:

Date,这意味着需要通过构造函数调用创建Date类型的值。换句话说,使用new Date(...)创建一个类实例。

Response.json方法只返回JSON格式的对象,并且不包含任何类的实例,只包含key:property的映射。

所以你需要做的是手动将.json()返回的值转换为Base对象。这可以按如下方式完成:

public getSingle = (keys: any[]): Observable<Badge> => {
        return this._http.get(this.actionUrl + this.getKeysUrl(keys))
            .map(r => r.json())
            .map(v => <Badge>{
              badgeNumber: v.badgeNumber,
              authorizationLevel: v.authorizationLevel,
              endOfValidity: new Date(v.endOfValidity)
              // preferably this string should be in ISO-8601 format
             })
            //the mapping step can be done in other ways most likely
            .catch(this.handleError);
}