web-dev-qa-db-fra.com

La propriété 'toPromise' n'existe pas sur le type '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);
    }
}    

Je reçois cette erreur:

La propriété 'toPromise' n'existe pas sur le type 'Observable'.

73
MiHawk

Vous devez ajouter l'opérateur comme ceci:

import 'rxjs/add/operator/toPromise';

Ceci est nécessaire pour chaque opérateur rxjs que vous souhaitez utiliser.

158
Dinistro

Essayez d'ajouter 'Réponse' à votre déclaration d'importation à partir de '@ angular/http' comme ceci:

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

De plus, j'ai remarqué que vous n'importiez pas Ingectable à partir de angular core bien que vous utilisiez @Injectable decorator.

import { Injectable } from '@angular/core';
10
Shai Barak

utiliser cette importation au début

import {Observable} from "rxjs/Rx";
6

Pour quiconque trébuche (c'est le lien Google le plus haut pour moi), voir ci-dessous ce qui provient de l'une des réponses liées.

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

Comme il est dit, dans Visual Studio 2015, vous pouvez résoudre ce problème en mettant à jour votre version de TypeScript via

https://www.Microsoft.com/en-us/download/details.aspx?id=4859

0
tony