Свойство '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 '{}'.

Я следил за примерами в документации angular 2, и он работает. Мне просто надоело смотреть на эту ошибку. Я что-то пропустил?

Ответы

Ответ 1

Мне это выглядит странно...

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

Я бы сделал

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

Ответ 2

Вы можете избавиться от этой ошибки с помощью type-assertion до Response:

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

http.post() вернет значение Observable<Response>, для которого map потребуется объект типа Response. Я думаю, что недостающее определение в текущем TypeScript AngularJS .d.ts.