HttpClient GET接收日期属性的字符串

时间:2018-12-17 19:10:29

标签: angular

我使用的是Angle 7(我猜它与2.x版相同),并且我使用的是类似于httpClient.get<Hero[]>(url)的东西,没有其他处理。 Hero还具有dateOfBirth类型的Date属性;当获得Hero数组时,我看到typeof dateOfBirthstring而不是Date

那正常吗?一个人怎么解决呢(我是说以某种方式Date)?

PS1:我不希望通过使用例如RxJs map运算符,因为我可能有一棵具有许多属性的对象树面临同样的问题,因此使用map意味着太多的工作

PS2:目前,我正在以下代码中解决某个地方(在该tap上的一个RxJs httpClient.get)上的问题:

if (typeof hero.dateOfBirth === 'string') {
  hero.dateOfBirth = new Date(hero.dateOfBirth);
}

收到的JSON例如:

"dateOfBirth" : "2018-12-17T20:04:32.721+0000"

1 个答案:

答案 0 :(得分:1)

JSON格式对日期一无所知。 JSON(通常)仅将奇异值指定为数字,字符串,布尔值或null。

如果您期望XMLHttpRequest的结果字段是Date,则需要像往常一样手动将其转换:

httpClient.get<Hero[]>(url).pipe(
    map(hero => hero.map(h => {
        h.dateOfBirth = new Date(h.dateOfBirth);
        return h;
    })))
  

PS1:我不希望使用RxJs映射运算符进行手动转换,因为我可能有一棵具有许多属性的对象树面临着相同的问题,因此使用map意味着太多的工作

为什么不呢?您最终将不得不迭代;当然,您可以将其抽象到其他地方或Observable运算符中,但是在发出数据之前先格式化Observable流中的数据是有意义的,以便在其他地方保持一致。