API返回的值未转换为Date

时间:2019-01-28 17:53:13

标签: angular typescript angular6 angular7

在Angular 7应用程序中,我具有以下模型:

public getTopPosts() {
  return this.httpClient.get<TopPostsResponse>>('top-posts');
}

TopPostsResponse在哪里:

export interface TopPostsResponse {
  id: number;
  title: string;
  created: Date;
}

我正在通过组件方法调用服务:

getTopPosts(): Observable<PostModel[]> {

  return this.postService.getTopPosts().pipe(

    map((response: TopPostsResponse) => { 

      console.log(response.created);
      console.log(response.created instanceof Date);

      var created = new Date(response.created);
      console.log(created);
      console.log(created instanceof Date);

      return {
        id: response.id, 
        created: response.created,
        title: response.title
      };

    }));

}

问题是,当我检查response.created是否为错误的日期时:

console.log(response.created); >> 2019-01-24T13:03:10.123684
console.log(response.created instanceof Date); >> FALSE

var created = new Date(response.created); 
console.log(created); >> Thu Jan 24 2019 13:03:10 GMT+0000 (WET)
console.log(created instanceof Date); >> TRUE

该服务似乎没有将API返回的值转换为Date类型,但仍然是有效的Date,因为我能够创建它的实例。

我想念什么?

1 个答案:

答案 0 :(得分:2)

Typescript不会自动将原始数据从请求转换为特定类型。您必须自己解析。

return {
    id: response.id, 
    created: new Date(response.created),
    title: response.title
  };

Typescript编译器在构建之前运行,而不是在运行时运行。因此,它不知道API响应中将包含什么。将转换Typescript代码,然后生成javascript代码,因此仅在编写代码时才进行类型检查。之后,really runs不会分析来自外部来源的数据。