ошибка TS2322: тип «Объект» не может быть назначен типу «Фильм»? Угловой 7 - PullRequest
0 голосов
/ 19 ноября 2018

Извините, что отвлекаюсь на мой глупый вопрос. Я недавно только изучаю 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: тип «Объект» не может быть назначен типу «Фильм». Тип «Объект» назначается очень немногим другим типам. Вы хотели использовать вместо этого любой тип? src / app / page / movie-detail / movie-detail.component.ts (34,27): ошибка TS2322: тип «Объект» нельзя назначить типу «Кино». Тип «Объект» назначается очень немногим другим типам. Вы хотели использовать вместо этого любой тип? Свойство «страница» отсутствует в типе «Объект».

Как исправить эту ошибку, или хотя бы где можно о ней прочитать, посмотреть, как это делается? У меня есть запрос 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 голосов
/ 19 ноября 2018

Поскольку вы используете HttpClient, вы должны предоставить необходимое приведение возвращенных результатов, как показано в этом ответе , который показывает, как настроить компонент и поставщика услуг для вызова и получения httpРезультаты JSON.

0 голосов
/ 19 ноября 2018

вы можете либо указать свой тип в функции 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...