【问题标题】:Error TS4053: Return type of public method from exported class has or is using name ‘Observable’错误 TS4053:来自导出类的公共方法的返回类型具有或正在使用名称“Observable”
【发布时间】:2017-02-13 17:11:41
【问题描述】:

我正在尝试使用 ionic 2 和 angular 2 构建应用程序, 我在尝试运行我的应用程序时收到此错误。 我建立了另一个项目来检查同样的问题, 我真的对这个问题感到困惑。

这是我的服务代码

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

}

【问题讨论】:

  • Import Observable import {Observable} from 'rxjs/Rx';并使 postLogin(data): Observable {

标签: angular typescript ionic-framework ionic2 ionic3


【解决方案1】:

我只是将其添加为答案,以便它可以帮助面临相同问题的其他 SO 用户。

就像@sudheer-kb 提到的那样,为了解决这个问题,您需要显式 导入Observable 类:

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

然后给你的方法一个明确的返回类型(也感谢@ruffin你的评论):

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

【讨论】:

  • for rxjs 6 import { Observable } from "rxjs";
  • 这真的很有帮助。但是,我只是导入了 { Observable },但在使用 BehaviorSubject 和 Subject 时从未在代码中使用过。但是如果没有 Observable 导入,它就会出错。
  • @KushalJayswal 我猜你使用类型 -- 作为函数的返回值,但是without giving an explicit return type。正如 sudheer 所说,您应该postLogin(data) { 改为postLogin(data): Observable&lt;any&gt; {。如果我只导入,tslint 会对我大喊大叫。两者都做会让 tslint(和未来的程序员)最快乐。
【解决方案2】:

我有一个类似的问题,它似乎与方法返回类型的问题有关。对我有用的是在我的方法声明之后简单地添加“:任何”,例如:

get(url) : any {
  //code
}

我不认为这是一个好习惯,但有时它可能是一个很好的解决方法。

【讨论】:

  • 在将修复程序推送到 Angular2 平台之前,这应该是公认的答案。这很简单,并且在弹出此错误时有效。通常,错误与特定方法有关,除非您有很多“喜欢”的方法,然后上面的其他解决方案似乎更合适。
  • 对我来说就是这样!谢谢。
  • @rjdamore 我可能遗漏了一个 2016 ng2 错误,但这个解决方案之所以有效,是因为它放弃了强类型。编译器:“等等,你正在返回一个没有被引用的类型。”这个解决方案:“哦,不要担心类型。”也就是说,通常行是get(url) {,没有指定返回类型。 声明一个强类型的返回类型似乎比手榴弹更好的解决方案:get(url): SomeType {。 sudheer's):“好的编译器,让我告诉你正确的类型[这也需要导入它]。
  • @ruffin 我并没有说这是最好的解决方案,但有时你不想在我所谓的编译器问题上浪费太多时间。
猜你喜欢
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2017-09-06
  • 2018-07-09
  • 2017-02-23
  • 2019-08-08
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多