web-dev-qa-db-fra.com

La propriété 'json' n'existe pas sur le type '{}'

J'ai une classe de base abstraite en TypeScript qui ressemble à ceci:

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));
    }
}

Cela fonctionne parfaitement. Cependant, le compilateur TypeScript se plaint de .map(res => res.json()). Je reçois toujours cette erreur:

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

J'ai suivi les exemples dans la angular 2 , et cela fonctionne . I ' Je suis juste malade de regarder cette erreur. Suis-je en train de manquer quelque chose?

17
drewwyatt

Cela me semble étrange ...

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

Je ferais

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

Vous pouvez vous débarrasser de cette erreur par assertion de type à Response:

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

http.post() renverra un Observable<Response> sur lequel map nécessitera un objet de type Response. Je pense que c'est une définition manquante dans l'actuel TypeScript AngularJS .d.ts.

9
CoderPi