输入observable< {}>不能分配给任何类型:Typescript

时间:2016-11-07 15:27:19

标签: angular typescript rxjs

我正在尝试使用Angular2 http。

将JSON数据保存在本地系统中
import { Injectable }     from '@angular/core';
import { Http, Response } from '@angular/http';
import { General }        from './general';
import { Observable }     from 'rxjs/Observable';

@Injectable()
export class GeneralService {
    // #docregion endpoint
    private statusUrl = './jsondata';  // URL to web API
    // #enddocregion endpoint

    // #docregion ctor
    constructor (private http: Http) {}
    // #enddocregion ctor

    // #docregion methods, error-handling, http-get
    getStatus (): Observable<General[]> {
        return this.http.get(this.statusUrl)
            .map(this.extractData)
            .catch(this.handleError);
    }
 private extractData(res: Response) {
        let body = res.json();
        return body.data || { };
    }


    private handleError (error: Response | any) {
        // In a real world app, we might use a remote logging infrastructure
        let errMsg: string;
        if (error instanceof Response) {
            const body = error.json() || '';
            const err = body.error || JSON.stringify(body);
            errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
        } else {
            errMsg = error.message ? error.message : error.toString();
        }
        console.error(errMsg);
        return Observable.throw(errMsg);
    }

}

我收到错误 - 类型observable&lt; {}&gt;不能分配给'Observable'类型。类型'{}'不能分配给'General []'类型。 “{}”

类型中缺少属性长度

这里General是一个类名。我使用rxjs-5.0。我正在关注Angular.io的英雄之旅并制作我自己的项目。对此有何帮助?

6 个答案:

答案 0 :(得分:5)

我从更改了进口商品
从“ rxjs / Observable”导入{Observable};

从“ rxjs”导入{Observable};
一切正常

答案 1 :(得分:2)

问题在于,当你得到一个物体时,你告诉可观察到获得一个Genral列表。

getStatus (): Observable<General[]>

如果您不接受数组,那么您应该这样做

getStatus (): Observable<General> 

答案 2 :(得分:1)

我会像这样调整extractData

private extractData(res: Response): General[] {
    let body = res.json();
    return (body.data || []) as General[];
}

现在它说它将返回General[]并且它还声明body.data属于该类型。如果是null结果,则返回空数组

答案 3 :(得分:0)

编译器说你试图将一个对象分配给一个数组(Generals)。

我猜你的问题出现在extractData的{​​{1}}中。请改为return body.data || []

答案 4 :(得分:0)

错误分配不是来自extractData()来自catch()来自<{1}}。

试试这个:

getStatus(): Observable<General[]> {
    return this.http.get(this.statusUrl)
        .map(this.extractData)
        .catch<General[]>(this.handleError);
}

答案 5 :(得分:0)

更新您的代码,如下所示:

getStatus(): Observable<Genral[]> {
  return this.http.get(this.statusUrl)
    .map((res) => this.extractData(res))
    .catch((err) => this.handleError(err));
}