Angular 从服务器处理typescript接口日期的最佳方法

Angular 从服务器处理typescript接口日期的最佳方法,angular,typescript,class,interface,Angular,Typescript,Class,Interface,在这个问题之后 我为从服务器API调用收到的响应定义了一个typescript接口,该响应有一个参数日期。由于它是json,并且是一个字符串,因此对该参数的进一步调用在IDE上有效,但在浏览器上无效,因为它实际上是一个字符串 我已经在使用该参数时使用了一个新的Date()解决了这个问题,但这违背了将其作为日期的初衷 我可以把它改成一个类而不是一个接口,但这是一个足够好的理由吗?对于大的物体,有很多样板 我可以解析服务上的响应并将其转换为日期?或者在拦截器中(知道怎么做吗?) 大多数情况下,我在寻

在这个问题之后

我为从服务器API调用收到的响应定义了一个typescript接口,该响应有一个参数日期。由于它是json,并且是一个字符串,因此对该参数的进一步调用在IDE上有效,但在浏览器上无效,因为它实际上是一个字符串

我已经在使用该参数时使用了一个新的Date()解决了这个问题,但这违背了将其作为日期的初衷

我可以把它改成一个类而不是一个接口,但这是一个足够好的理由吗?对于大的物体,有很多样板

我可以解析服务上的响应并将其转换为日期?或者在拦截器中(知道怎么做吗?)


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

可以考虑几种方法

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

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

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

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

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


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

JSON不支持日期,这就是它们以字符串形式出现的原因。您应该使用只有JSON支持的原语的数据传输对象,并在反序列化后转换它们。接口不会被传输,因此最终JavaScript对它们一无所知。如果您的日期作为字符串(在JSON响应中)从API接收,则必须手动将其转换为日期。一种方法是使用拦截器,它将遍历响应并转换符合日期ISO格式的所有字符串值。另一种方法是为您的模型属性定义自定义装饰器,并为此实现解析器。那个拦截器能猜到我需要一个带有日期的接口,并只转换那个特定的字符串吗?你会如何处理decorator选项,这意味着我需要使用类而不是接口,对吗?是的,我们使用的是ISO日期,这很好。我的问题是,我将一个类型定义为date,然后每当我访问它时,我都需要对它调用新的date()。我同意自定义标题是一种莫阿布,但我希望javascript或typescript能够有一个很好的解决方案来识别我正在接收该接口,并在每次请求时将该值转换为最新值。@talkshowhost接口无法确定这一点,但类肯定可以。这会很有帮助的!非常有趣,我不知道这个库,我会研究它的!谢谢
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();