订阅中的对象类型不存在该属性

时间:2019-08-16 20:56:46

标签: angular typescript ionic4 jslint

我正在使用forkJoin进行多个http调用,但它给了我错误error TS2339: Property 'data' does not exist on type 'Object'

forkJoin(this.userservice.getUser(), this.userservice.getDashboard()).pipe(
    map(([userData, dashboardData]) => {

      // set the user
      this.user = userData;

      // set order count
      this.orderCount.new = dashboardData.data.new.length;
      console.log(dashboardData);

      this.dataLoaded = true;
    })
).subscribe();

我理解该错误,因为此属性来自外部api,因此在angular / ionic中未设置该属性。但是以我为例

map(([userData, dashboardData<any>]) => {

或类似的东西,它不起作用。我该如何解决?

getUser和getDashboard返回http对象

    getUser() {
    return this.http.get(environment.baseUrl + '/auth/user').pipe(
        map(results => {
            console.log(results);
            return results;
        })
    );
}

2 个答案:

答案 0 :(得分:2)

在您的代码中,替换此行

  this.orderCount.new = dashboardData.data.new.length;

与此

  this.orderCount.new = (dashboardData as any).data.new.length;

此行的工作是将Object转换为typescript的任何类型。

更好的方法是为数据创建模型类,并使用这些模型类代替任何模型类。

答案 1 :(得分:2)

您可以这样输入数组:

map(([userData, dashboardData]: [UserData, DashboardData]) =>

或者您可以只输入您的观测值。不要滥用任何东西。