web-dev-qa-db-fra.com

Erreur TS4053: le type de retour de méthode publique de la classe exportée a ou utilise le nom «Observable»

j'essaie de construire une application avec ionic 2 angular 2, j'obtiens cette erreur pendant que j'essaie d'exécuter mon application. je construis un autre projet pour vérifier et le même problème, je suis vraiment confus sur ce problème.

error in photo

c'est mon code de service

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import { Storage} from '@ionic/storage';
import {NavController} from "ionic-angular";


/*
  Generated class for the MyService provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular 2 DI.
*/
@Injectable()
export class MyService {
  public local :Storage;
  public getsession : any;
  constructor(private http: Http, private navCtrl : NavController) {
    this.local = new Storage();
    console.log("my-service page")
  }

  postLogin(data){
    let link = "http://adirzoari.16mb.com/login.php";
    return this.http.post(link,data)
        .map(res => res.json())
  }

  checkToken(){
    return this.getsession =this.local.get('token');
  }

}
22
Adir Zoari

J'ajoute seulement ceci comme réponse pour que cela puisse aider les autres SO utilisateurs confrontés au même problème.

Tout comme @ sudheer-kb mentionné, pour résoudre ce problème, vous devez explicitement importer le Observable classe:

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
// ...
import { Observable } from "rxjs/Observable"; // <- add this import

Et puis donnez à votre méthode un type de retour explicite (merci aussi @ ruffin pour votre commentaire):

postLogin(data): Observable<any> {
    // ...
}
56
sebaferreras

J'ai eu un problème similaire, il semble lié à un problème avec les types de retour de méthodes. Ce qui a fonctionné pour moi, c'est d'ajouter simplement ": any" juste après la déclaration de mes méthodes, comme ceci par exemple:

get(url) : any {
  //code
}

Je ne pense pas que ce soit une bonne habitude, mais cela peut parfois être une bonne solution.

14
user3516766