Angular 使用带有嵌套对象的模型时出现角度类型脚本错误

Angular 使用带有嵌套对象的模型时出现角度类型脚本错误,angular,typescript,Angular,Typescript,我在HttpClient上使用angular 6 这是我对OMDB api执行搜索调用时得到的结果: {"Search":[{"Title":"Pirates of the Caribbean: At World's End","Year":"2007","imdbID":"tt0449088","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BMjIyNjkxNzEyMl5BMl5BanBnXkFtZTYwMjc3M

我在HttpClient上使用angular 6

这是我对OMDB api执行搜索调用时得到的结果:

{"Search":[{"Title":"Pirates of the Caribbean: At World's End","Year":"2007","imdbID":"tt0449088","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BMjIyNjkxNzEyMl5BMl5BanBnXkFtZTYwMjc3MDE3._V1_SX300.jpg"},{"Title":"This Is the End","Year":"2013","imdbID":"tt1245492","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BMTQxODE3NjM1Ml5BMl5BanBnXkFtZTcwMzkzNjc4OA@@._V1_SX300.jpg"},{"Title":"The World's End","Year":"2013","imdbID":"tt1213663","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BNzA1MTk1MzY0OV5BMl5BanBnXkFtZTgwNjkzNTUwMDE@._V1_SX300.jpg"},{"Title":"Seeking a Friend for the End of the World","Year":"2012","imdbID":"tt1307068","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BMTk4MDQ1NzE3N15BMl5BanBnXkFtZTcwMjA0MDkzNw@@._V1_SX300.jpg"},{"Title":"House at the End of the Street","Year":"2012","imdbID":"tt1582507","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BMjIxNTUwNTU4N15BMl5BanBnXkFtZTcwNTE0MTI3Nw@@._V1_SX300.jpg"},{"Title":"The End of the F***ing World","Year":"2017–","imdbID":"tt6257970","Type":"series","Poster":"https://ia.media-imdb.com/images/M/MV5BMzhhMTczMDQtNWE0Yy00OTJiLTlmYjgtNWU1MmVkYTVlYWVhXkEyXkFqcGdeQXVyNjEwNTM2Mzc@._V1_SX300.jpg"},{"Title":"John Dies at the End","Year":"2012","imdbID":"tt1783732","Type":"movie","Poster":"https://images-na.ssl-images-amazon.com/images/M/MV5BMTUyNzIyNzc0MV5BMl5BanBnXkFtZTcwOTM5ODg1OA@@._V1_SX300.jpg"},{"Title":"The End of the Tour","Year":"2015","imdbID":"tt3416744","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BMTUwODU3NjQxNF5BMl5BanBnXkFtZTgwODE2NTE4NTE@._V1_SX300.jpg"},{"Title":"Neon Genesis Evangelion: The End of Evangelion","Year":"1997","imdbID":"tt0169858","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BYmE1ZTFjZTMtMDVjYy00ZWYwLTg2ZGUtODhhODgxMjdhYjAxXkEyXkFqcGdeQXVyMzM4MjM0Nzg@._V1_SX300.jpg"},{"Title":"The End of the Affair","Year":"1999","imdbID":"tt0172396","Type":"movie","Poster":"https://ia.media-imdb.com/images/M/MV5BYzhkNDRkMDctYTcxMy00MTI3LWI5ODQtZWNkYWQ2ZjA2ZDk2XkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg"}],"totalResults":"1311","Response":"True"}
此结果由搜索(带结果的对象)、totalResults(字符串)和response(字符串)组成

“我的服务”文件中的搜索功能:

search(term: string): Observable<Result[]> {

    const url = `http://www.omdbapi.com?s=${term}&apikey=12345`; 

    return this.http.get<Result[]>(url).pipe(
        map(search => search.Search),
        catchError(this.handleError)
    );
}
我找不到一种方法来处理OMDB api给我的响应。模型如下所示:

export class Result {
    totalResults: number;
    Response: boolean;
    Search: {
        Poster: string;
        Title: string;
        Type: string;
        Year: number;
        imdbID: string;
    };
}

属性
Search
是一个数组。编辑您的函数
search(term:string)
search(term:array)
http请求将返回一个
结果[]
。错误是说没有
结果[]。搜索
,这是真的

你可以这样做

map((results: Result[]) => results.map((result:Result) => result.Search))
results.map
指的是而不是RxJs


您还需要提取
Search
interface/class并返回
Observable

只需添加
map((Search:Result)=>Search.Search)
错误将得到解决。@DevangNaghera这将破坏使用的全部目的interfaces@bugs更新了代码:)@DevangNaghera您的第一个建议
code
map((search:any)=>search.search)运行良好,但是我认为最好定义类型。您当前的解决方案出现了以下错误:“OperatorFunction”类型的参数看起来不错,但我得到了这样的结果:
类型“Observable”不可分配给类型“Observable”。
您想返回不正确的ObservableThat。该参数用于用户使用键盘键入的输入。
map((results: Result[]) => results.map((result:Result) => result.Search))