错误TS2322:类型“对象”不能分配给类型“电影”吗?角度7

时间:2018-11-19 15:29:26

标签: angular typescript angular7

很抱歉让我愚蠢的问题分心。我最近刚学习Angular 2+,但仍然不了解所有内容。 我查看了该问题的其他答案,但它们没有帮助我。我有一个返回列表和列表单独项的函数。

服务代码:

constructor(private http: HttpClient) { }
getMovies() {
 return this.http.get(this.baseUrl);
}
getMovie(id: number) {
return this.http.get(this.baseUrl + id);
}

返回列表的组件

 private movies = [];
 constructor(private movieService: MovieService) {}
 ngOnInit() {
  this.getMovies();
 }
private getMovies() {
 this.movieService.getMovies()
  .subscribe((response: any) => {
    this.movies = response.results;
  });
}

还有返回列表项的组件:

movie = new Movie();

constructor(
 private movieService: MovieService,
 private activeRoute: ActivatedRoute) {
}

ngOnInit(): void {
 this.getMovie();
}

getMovie(): void {
 const id = +this.activeRoute.snapshot.paramMap.get('id');
  this.movieService.getMovie(id)
  .subscribe(movie => this.movie = movie);
}

无论我做什么以及如何不重写代码,都会遇到相同的错误。

src / app / page / movie-detail / movie-detail.component.ts(34,27)中的错误:错误TS2322:类型“对象”不能分配给类型“电影”。   “对象”类型可分配给很少的其他类型。您的意思是改用“ any”类型吗? src / app / page / movie-detail / movie-detail.component.ts(34,27):错误TS2322:类型“对象”不能分配给类型“电影”。   “对象”类型可分配给很少的其他类型。您的意思是改用“ any”类型吗?     类型“对象”中缺少属性“页面”。

如何更正此错误,或者至少在何处可以了解此错误,请参阅如何完成?我有一个API请求,返回以下内容:

{"page": 1,
"results": [
{
  "poster_path": "/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg",
  "adult": false,
  "overview": "Framed in the 1940s for the...",
  "release_date": "1994-09-10",
  "genre_ids": [
    18,
    80
  ],
  "id": 278,
  "original_title": "The Shawshank Redemption",
  "original_language": "en",
  "title": "The Shawshank Redemption",
  "backdrop_path": "/xBKGJQsAIeweesB79KC89FpBrVr.jpg",
  "popularity": 5.446135,
  "vote_count": 5250,
  "video": false,
  "vote_average": 8.32
},
{
  "poster_path": "/lIv1QinFqz4dlp5U4lQ6HaiskOZ.jpg",
  "adult": false,
  "overview": "Under the direction o...",
  "release_date": "2014-10-10",
  "genre_ids": [
    18,
    10402
  ],
  "id": 244786,
  "original_title": "Whiplash",
  "original_language": "en",
  "title": "Whiplash",
  "backdrop_path": "/6bbZ6XyvgfjhQwbplnUh1LSj1ky.jpg",
  "popularity": 9.001948,
  "vote_count": 2072,
  "video": false,
  "vote_average": 8.28
}
],
"dates": {
"maximum": "2016-09-01",
"minimum": "2016-07-21"
},
"total_pages": 33,
"total_results": 649
}

我认为我的服务有误,因为我在显示列表和列表的单独项时没有得到页面。但是我没有找到如何做不同的方法,或者这些选项不再起作用。

2 个答案:

答案 0 :(得分:2)

您可以在get函数中指定类型

return this.http.get<Movie>(this.baseUrl);

或在您的函数中指定

getMovies(): Observable<Movie> {
 return this.http.get(this.baseUrl);
}

或者两者都做

 getMovies(): Observable<Movie> {
     return this.http.get<Movie>(this.baseUrl);
}

答案 1 :(得分:0)

由于您使用的是HttpClient,因此必须提供返回结果的必要转换,如this answer所示,其中显示了如何同时设置组件和服务提供者以调用和接收http JSON结果。