【问题标题】:How do I apply a type of any to an object returned by an observable?如何将任何类型应用于可观察对象返回的对象?
【发布时间】:2019-07-04 09:50:19
【问题描述】:

我有一个简单的 observable 用于从 url https://api.github.com/users 检索数据,我希望能够映射这些数据,以便我只能从数组中包含的每个用户返回 login 属性由端点返回。

但是,当我尝试在我的 map 函数上调用 data => data.login 时,我收到一个编译器错误,提示 Property 'login' does not exist on type {}。我理解这是因为返回的对象没有类型。

如果不为返回的对象创建接口,我如何将any 类型应用于可观察对象公开的对象,以便我可以使用map 对其进行转换?

var githubStream = this.http.get('https://api.github.com/users');

githubStream.subscribe(out => {
    pipe(map(data => data.login))
});

【问题讨论】:

  • 类似githubStream.subscribe((out: any) => { pipe(map(data => data.login)) });
  • 对于那个特定的 observable,因为它支持泛型,this.http.get<any>(...)?但最好更具体一点——写一个代表实际返回值的接口。见angular.io/guide/http#type-checking-the-response
  • @GopeshSharma 这仍然给编译器错误?

标签: angular rxjs


【解决方案1】:

你可以添加any来定义out的类型

会是这样的

var githubStream = this.http.get('https://api.github.com/users')

githubStream.subscribe((out: any) => {
  pipe(map(data => data.login))
});

【讨论】:

    【解决方案2】:
        var githubStream = this.http.get<any>('https://api.github.com/users');
    
    githubStream.subscribe(out => {
        pipe(map(data => data.login))
    });
    

    更新

     protected getUsers<T>(url: string):  Observable<T> {
    return this.http.get<any>(url)
    .pipe(map(data => {
      return data.body 
    }));
    

    }

    this.getUsers.subscribe(data => {
          console.log(data.login)
        }
    

    【讨论】:

    • 这样做仍然会产生编译器错误。见这里:imgur.com/a/6zMfwmg
    • 您介意分享您的结果数据对象吗?哪个来自 API?
    猜你喜欢
    • 2018-12-16
    • 2019-02-18
    • 1970-01-01
    • 2017-07-12
    • 2018-04-11
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多