Angular 4.3+:HttpClient泛型

时间:2017-11-06 18:28:27

标签: angular typescript generics

我将指定泛型类型T作为此方法的返回值时出现语法错误:

  private getResource<T>(resource: string, pagination?: string): T {
    this.updateSessionToken();
    const url = this.buildUrl(resource, pagination);
    this.http
      .get<T>(url, {headers: this.headers, observe: 'response'})
      .retry(3)
      .subscribe(
        (response) => {
          return response;
        },
        (error: HttpErrorResponse) => {
          return error;
        }
      );
  }

什么是避免使用any或void作为tslint的以下建议:

enter image description here

1 个答案:

答案 0 :(得分:1)

如果定义的返回值既不是void也不是任何(也允许返回void),则必须在任何返回路径中返回一个值。 您的getResource函数永远不会返回任何值,因为它没有返回语句。 您定义返回值的唯一位置是另一个嵌套的lambda函数,正如语法(arg1,arg2,...) => {...}所暗示的那样。因此,在这个嵌套函数的主体内写一个return语句不会返回外部函数的值,正如您可能尝试的那样。此外,http.get函数是异步的,这意味着您发送请求并继续读取函数代码,而不是在等待响应时被阻塞,并且由于该函数没有下一行,您退出函数没有返回任何值。 看起来您的体系结构可能是错误的,因为在异步编程中您不应该期望立即响应,而是将后续操作作为成功的lambda提供(而不是返回响应,以在该函数之外使用它的方式使用它) ,对于失败函数也一样。

我建议你多阅读一下异步请求的主题,因为它是Web开发的一个主要原则,并建议你在Angular中专门阅读Observer(它基本上与Promise的概念相同)。 / p>