我使用的是角度 7(我想版本 2.x 也是如此),我使用的是类似于httpClient.get<Hero[]>(url)
的东西,没有其他处理。Hero
还具有具有Date
类型的dateOfBirth
属性;获取Hero
数组时,我看到typeof dateOfBirth
string
而不是Date
。
这正常吗? 如何解决它(我的意思是以某种方式Date
)?
PS1:我不是在寻求使用例如 RxJsmap
运算符进行一些手动转换,因为我可能有一个对象树,其中许多属性面临相同的问题,因此使用map
将意味着太多的工作
PS2:目前我正在解决在代码中的某个地方(该httpClient.get
上的 RxJstap
)的问题:
if (typeof hero.dateOfBirth === 'string') {
hero.dateOfBirth = new Date(hero.dateOfBirth);
}
收到的JSON
例如:
"dateOfBirth" : "2018-12-17T20:04:32.721+0000"
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 运算符进行一些手动转换,因为我可能有一个对象树,其中许多属性面临相同的问题,所以使用 map 意味着太多的工作
为什么不呢?您最终将不得不迭代;当然,您可以在其他地方或将其抽象为 Observable 运算符,但在发出之前格式化 Observable 流中的数据是有意义的,以便它在其他地方保持一致。