Свойство 'toPromise' не существует в типе 'Observable <Response>'

import { Headers, Http } from '@angular/http';

@Injectable()
export class PublisherService{

    private publishersUrl = 'app/publisher';

    constructor(private http: Http) { }

    getPublishers(): Promise<Publisher[]>{
        return this.http.get(this.publishersUrl)
                   .toPromise()
                   .then(response => response.json().data) 
                   .catch(this.handleError);
    }
}    

Я получаю эту ошибку:

Свойство "toPromise" не существует в типе "Observable".any

Ответ 1

Вам нужно добавить оператор следующим образом:

import 'rxjs/add/operator/toPromise';

Это необходимо для каждого оператора rxjs, который вы хотите использовать.

Ответ 2

Попробуйте добавить 'Response' в свой оператор import из '@angular/http' например:

import {Http, Headers, Response} from '@angular/http';

Также я заметил, что вы не импортируете Ingectable из ядра angular хотя вы используете @Injectable decorator.

import { Injectable } from '@angular/core';

Ответ 3

использовать этот импорт в начале

import {Observable} from "rxjs/Rx";

Ответ 4

Для кого-либо, кто наткнулся на это (это была главная ссылка google для меня), см. ниже, что связано с одним из связанных ответов

https://github.com/Microsoft/TypeScript/issues/8518#issuecomment-229506507

Как говорится, в Visual Studio 2015 вы можете исправить это, обновив версию typescript через

https://www.microsoft.com/en-us/download/details.aspx?id=48593

Ответ 5

Для меня правильный ответ, отмеченный здесь, не работал, и я был заблокирован. Итак, я просмотрел еще одну ссылку которая предполагает, что это может быть проблемой с Visual Studio. Я попробовал вариант, который они предложили в ответ, но это также не сработало.

Итак, я пошел и установил код Visual Studio. Вещи начали нормально работать для меня, и я был разблокирован. Публикация этого для людей, которые заблокированы на нем (как и я).

Я знаю, что это не решение, а просто обходной способ, помогающий разблокировать людей.

Надеюсь, что это поможет.