javascript - Observable 已订阅,响应已返回,无法访问字段

标签 javascript http angular rxjs observable

这里,这是我的观察结果:

userLogin(formData: Object):Observable<Response> {
    return this.http.post(apiURL + '/api/logon', formData)
        .map((response: Response) => {
            return response.json();
        }
    })
}

然后我在某个地方订阅如下:

this.auth.userLogin(forData)
  .subscribe((result) => {
    console.log(result); // this logs the response from server object
    // console.log(result.username) doesn't work WHY?
    // Error: Property 'username' does not exist on type 'Response'
  })

那么我做错了什么?

编辑:

Console.log 输出:

Object {
    pappassword:"2f636cc3f8ffeda00dfe448fc483ce3"
    success:true
    uamip:"192.168.182.1"
    uamport:"3990"
    username:"jh"
    userurl: "http://www.gstatic.com/generate_20"
}

enter image description here

最佳答案

userLogin 方法的返回类型应为 Observable<T> ,这里 T 代表您的响应数据类型/接口(interface)。您可以使用响应数据模型创建一个接口(interface)并将其用作您的数据类型。

interface UserInterface {
  pappassword: string
  success: boolean
  uamip: string
  uamport: string
  username: string
  userurl: string
}

并在您的 userLogin 方法中:

userLogin(formData: Object):Observable<UserInterface> {
  ...
}

我们可以只使用Observable<any>但这是 TypeScript 的最佳实践。

关于javascript - Observable 已订阅,响应已返回,无法访问字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42089158/

相关文章:

javascript - 如何从 iframe 内部引用 div?

angularjs - 在 Restangular 中发送 GET 参数

使用 Angular 进行 AJAX 更新

c# - 恢复下载

json - 如何使用 TypeScript 在 Angular 2 中将对象正确转换为 JSON

javascript - scrolltop() 不适用于 body.height()

javascript - 从 javascript 验证特定的验证组

angular - WebStorm:Angular 模板类型检查

javascript - Babel 下调用 super() 自定义错误无法输出堆栈?

html - Angular:用户登录时隐藏元素