【问题标题】:Typescript - A function whose declared type is neither 'void' nor 'any' must return a valueTypescript - 声明类型既不是“void”也不是“any”的函数必须返回一个值
【发布时间】:2018-03-09 20:22:32
【问题描述】:

我是 Angular2/Typescript 的新手,我正在尝试编译我的项目,但出现此错误:

声明类型既不是“void”也不是“any”的函数必须返回一个值

这是代码:

SyncCustomer(codCli: string): Observable<any>
{ 
    this.mdService.Ordini_Sincronizza(codCli).subscribe(
    data => {          
      return Observable.of(data);
    },
    error => {
      console.log(error);
      return Observable.of(error);
    });  
}

我不知道问题出在哪里......

感谢支持!

更新 001:

我以这种方式编辑了代码,现在它可以编译...

  SyncCustomer(codCli: string): Observable<any> {
    return Observable.of(this.mdService.Ordini_Sincronizza(codCli).subscribe(
      data => {
        return data;
      },
      error => {
        console.log(error);
        return error;
      }));
  }

返回订阅的可观察对象是否有意义???

【问题讨论】:

  • 您期望返回类型为 observable 。这里
  • 把return放在this.mdSer前面...所以它返回
  • return放在第一行前面:return this.mdService.Ordini_Sincronizza ...
  • 你为什么要订阅你的函数?
  • 这意味着,每当您创建一个方法/函数并且指定的返回类型既不是voidany 时,该方法必须返回一个值,即您必须使用return方法中的关键字。

标签: angular typescript


【解决方案1】:

return data/return error 部分仅与两个回调相关,您的方法不会为您的第一个代码返回任何内容,而 Subscription 对于第二个代码。

如果你想返回一个 Observable,你不应该直接订阅:

SyncCustomer(codCli: string): Observable<any> {
  return Observable.of(this.mdService.Ordini_Sincronizza(codCli);
}

其实我觉得你不需要在这里订阅。你需要订阅才能让一个冷的 Observable 开始发射,但你应该订阅你需要数据的地方(通常在你的组件内),或者根本不订阅组件代码内的订阅,而是使用 async 管道在模板内订阅。

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 2021-12-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多