下面的问题Dates in a Typescript interface are actually strings when inspected
我为从服务器API调用接收到的响应定义了一个Typescript接口,该响应具有参数Date。由于它以json形式出现并且是一个字符串,因此对该参数的进一步调用在IDE上可以进行,但由于它实际上是一个字符串,因此在浏览器上将不起作用。
使用该参数时,我已经使用新的Date()解决了该问题,但这违背了将其作为Date放在首位的目的。
我可以将其更改为Class而不是接口,但这是一个足够好的理由吗?对于大型物体来说,这是很多样板...
我可以在服务上解析该响应并将其转换为Date?还是在拦截器中(知道怎么做?)?
export interface ResourceMovement {
lastMovementDate?: Date;
}
// got this from the server
const movement: ResourceMovement;
// no error on IDE, but error on browser
const time = movement.lastMovementDate.getTime();
大多数情况下,我正在寻找想法和讨论以最干净,可重用的方式解决此问题!
答案 0 :(得分:1)
可以考虑几种方法。
最常见的一种是依靠时间戳。时间戳是自1970年1月1日GMT + 0起的数字,以MS为单位。我所知道的任何语言都可以阅读时间戳。
第二种方法是使用特定的字符串,例如UTC日期或ISO日期。即使不是全部,大多数语言也可以阅读这些公认的格式。它们包含时区,与时间戳相反。
要使用的解决方案在很大程度上取决于您的需要:如果您需要由服务器设置日期,则需要使用时间戳记。但是,如果希望用户根据他们的语言环境设置日期,则需要使用字符串。
现在,要将日期转换为所需的格式,我个人将在专用的utils / service中使用一个映射器。
拦截器的问题是,您实际上不知道哪个字段是日期,因为它们不是Date的实例,而是字符串/数字。
您可能会使用带有自定义标头的拦截器来确定要转换的字段,但这是使用MOAB杀死蟑螂...