首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角4-5 HttpClient强类型的http

角4-5 HttpClient强类型的http
EN

Stack Overflow用户
提问于 2017-12-11 13:39:14
回答 1查看 2.5K关注 0票数 2

我使用一个帮助器服务来简化httpClient调用。我想强烈地键入返回的可观察的内容。

在我的服务中,我使用了api服务,并试图获得一个强类型的、可观察的、发射>的服务。

代码语言:javascript
运行
复制
export class ApiUser(){
  constructor(private api: Api){}

  getUsers(url? : string): Observable<Array<User>>{
    return this.api.get<Array<User>>('users'); //here I get errors on types.
  }
}

我的api助手服务,其中应该传递类型:

代码语言:javascript
运行
复制
    import { HttpClient, HttpParams } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    import {Observable} from "rxjs/Observable";
    import {User} from "../../interfaces/interfaces";

    /**
     * Api is a generic REST Api handler.
     */
    @Injectable()
    export class ApiService {
      constructor(public http: HttpClient) {}

      get(endpoint: string, params?: any, reqOpts?: any){
       
        return this.http.get('https://sub.domain.com/api/v1/' + 
     endpoint,reqOpts);
      }
    }

所以问题是,这很可能不是强类型的正确方式,如果我在api服务中键入this.http.get,它就能工作,但这违背了拥有助手服务的目的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-11 14:01:33

您需要向您的https://www.typescriptlang.org/docs/handbook/generics.html函数提供一个ApiService.get,因为当没有提供一个类型时,HttpClient.get会假设一个标准的Object。为此,您可以更新ApiService.get以使用这样的类型变量(例如T),如下所示:

代码语言:javascript
运行
复制
get<T>(endpoint: string, params?: any, reqOpts?: any) {
    return this.http.get<T>('https://sub.domain.com/api/v1/' + 
         endpoint,reqOpts);
}

注意,您将<T>指定为函数声明(get<T>)的一部分,也指定为传递给HttpClient.get的参数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47754232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档