错误 TS2322:类型 'Object' 不能分配给类型 'Movie'? Angular 7
error TS2322: Type 'Object' is not assignable to type 'Movie'? Angular 7
很抱歉我的愚蠢问题分散了你的注意力。最近刚学Angular 2+,还不是很懂。
我看了这个问题的其他答案,但他们没有帮助我。我有一个函数 returns 一个列表和一个单独的列表项。
服务代码:
constructor(private http: HttpClient) { }
getMovies() {
return this.http.get(this.baseUrl);
}
getMovie(id: number) {
return this.http.get(this.baseUrl + id);
}
returns列出的组件
private movies = [];
constructor(private movieService: MovieService) {}
ngOnInit() {
this.getMovies();
}
private getMovies() {
this.movieService.getMovies()
.subscribe((response: any) => {
this.movies = response.results;
});
}
我的组件 returns 一个列表项:
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:类型 'Object' 不可分配给类型 'Movie'。
'Object' 类型可分配给极少数其他类型。您是想改用 'any' 类型吗?
src/app/page/movie-detail/movie-detail.component.ts(34,27):错误 TS2322:类型 'Object' 不可分配给类型 'Movie'。
'Object' 类型可分配给极少数其他类型。您是想改用 'any' 类型吗?
属性 'page' 在类型 'Object' 中缺失。
如何更正此错误,或者至少您可以在哪里阅读它,看看它是如何完成的?我有一个 API 请求,其中 returns 以下内容:
{"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
}
我认为我的服务有误,因为我在显示列表和列表的单独项目时没有获取页面。但我没有找到不同的做法,或者这些选项不再有效。
您可以在 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);
}
因为您使用的是 HttpClient
,所以您必须提供返回结果的必要转换,如 所示,它展示了如何设置组件和服务提供者来调用和接收http JSON 个结果。
很抱歉我的愚蠢问题分散了你的注意力。最近刚学Angular 2+,还不是很懂。 我看了这个问题的其他答案,但他们没有帮助我。我有一个函数 returns 一个列表和一个单独的列表项。
服务代码:
constructor(private http: HttpClient) { }
getMovies() {
return this.http.get(this.baseUrl);
}
getMovie(id: number) {
return this.http.get(this.baseUrl + id);
}
returns列出的组件
private movies = [];
constructor(private movieService: MovieService) {}
ngOnInit() {
this.getMovies();
}
private getMovies() {
this.movieService.getMovies()
.subscribe((response: any) => {
this.movies = response.results;
});
}
我的组件 returns 一个列表项:
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:类型 'Object' 不可分配给类型 'Movie'。 'Object' 类型可分配给极少数其他类型。您是想改用 'any' 类型吗? src/app/page/movie-detail/movie-detail.component.ts(34,27):错误 TS2322:类型 'Object' 不可分配给类型 'Movie'。 'Object' 类型可分配给极少数其他类型。您是想改用 'any' 类型吗? 属性 'page' 在类型 'Object' 中缺失。
如何更正此错误,或者至少您可以在哪里阅读它,看看它是如何完成的?我有一个 API 请求,其中 returns 以下内容:
{"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
}
我认为我的服务有误,因为我在显示列表和列表的单独项目时没有获取页面。但我没有找到不同的做法,或者这些选项不再有效。
您可以在 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);
}
因为您使用的是 HttpClient
,所以您必须提供返回结果的必要转换,如