从服务器处理打字稿界面上的日期的最佳方法



在这个问题之后 打字稿界面中的日期在检查时实际上是字符串

我为从服务器 API 调用收到的响应定义了一个打字稿接口,该接口具有参数 Date。由于它以 json 形式出现并且它是一个字符串,因此对该参数的进一步调用在 IDE 上有效,但在浏览器上不起作用,因为它确实是一个字符串。

使用该参数时,我已经使用新的 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();

大多数情况下,我正在寻找想法并讨论解决此问题的最干净和可重用的方法!

可以考虑几种方法。

最常见的是依赖时间戳。时间戳是从 1970 年 1 月 1 日 GMT+0 开始的数字,以 MS 为单位。我知道的任何语言都可以读取时间戳。

第二种方法是使用特定的字符串,例如 UTC 日期或 ISO 日期。这些是大多数语言都可以阅读的公认格式,如果不是全部的话。它们包含时区,与时间戳相反。

使用的解决方案在很大程度上取决于您的需求:如果您需要服务器设置日期,那么时间戳是要走的路。但是,如果您希望用户根据其区域设置设置日期,则需要使用字符串。

现在,为了将您的日期转换为所需的格式,我个人会在专用实用程序/服务中使用映射器。

拦截器的问题在于您无法真正知道哪个字段是日期,因为它们不是日期的实例,而是字符串/数字。

您可能可以使用带有自定义标头的拦截器来确定要转换的字段,但这要使用 MOAB 杀死蟑螂......

最新更新