web-dev-qa-db-ja.com

プロパティ「json」はタイプ「{}」に存在しません

TypeScriptには、次のような抽象基本クラスがあります。

_import {Http, Headers, Response} from 'angular2/http'; 
export abstract class SomeService {
    constructor(private http:Http) {}   

    protected post(path:string, data:Object) {
        let stringifiedData = JSON.stringify(data);
        let headers = new Headers();
        headers.append('Content-Type', 'application/json');
        headers.append('Accept', 'application/json');

        this.http.post(`http://api.example.com/${path}`, stringifiedData, { headers })
            .map(res => res.json())
            .subscribe(obj => console.log(obj));
    }
}
_

完璧に機能します。ただし、TypeScriptコンパイラは.map(res => res.json())について文句を言っています。このエラーが発生し続けます:

_ERROR in ./src/app/components/shared/something/some.abstract.service.ts
(13,29): error TS2339: Property 'json' does not exist on type '{}'.
_

the angular 2 documentation 、およびit worksの例に従いました。 mこのエラーをじっと見つめているだけでうんざり。

17
drewwyatt

私にはこれは奇妙に見える...

.map(res => (<Response>res).json())

私はやります

.map((res: Response) => res.json())
21
Mackelito

Responseへの型アサーションにより、このエラーを取り除くことができます:

_.map((res: Response) => res.json())
_

http.post()mapで_Observable<Response>_を返し、Response型のオブジェクトが必要です。これは、現在のTypeScript AngularJS _.d.ts_に定義が欠けていると思います。

9
CoderPi