【问题标题】:Property does not exist on type '{}' in Angular2Angular2 中的类型“{}”上不存在属性
【发布时间】:2016-09-26 17:46:33
【问题描述】:

我已经使用 http 调用获取数据。但是,我在编译时显示了上述错误。

user.component.ts

this._user.saveUsers(model).then(data => {
    if(data.success==true){
        this.router.navigate(['/user/list']);
    }else{
        console.log("data")
    }
});

注意:我的对象是动态的。取决于我的 http 调用

错误:

app/users/users.component.ts(33,21):错误 TS2339:类型“{}”上不存在属性“成功”。 app/users/users.component.ts(34,38):错误 TS2339:类型“{}”上不存在属性“数据”。 app/users/users.component.ts(76,25):错误 TS2339:类型“{}”上不存在属性“成功”。

【问题讨论】:

  • this._user.saveUsers(model).then(data => { console.log(data)}) check n 告诉你在控制台得到了什么???

标签: angular typescript


【解决方案1】:

我不知道第 33 和 34 行,因为它们没有显示在您的代码中,但是您必须输入 76

data: any

或者

data: {success: any}

【讨论】:

    【解决方案2】:

    您能否发布方法saveUsers 的定义。 如果您使用的是es6-promise,请查看typings。如您所见,promise 类接受一个通用接口T,它可用于定义可传递给then 的对象类型。因此,如果函数 saveUsers 返回一个承诺,即类似

    function saveUsers(model: any) {
        return new Promise((resolve, reject) => {...})
    }
    

    您需要使函数接受泛型并将其传递给返回的承诺,例如

    function saveUsers<T>(model: any) {
        return new Promise<T>((resolve, reject) => {...})
    }
    

    所以现在你可以简单地调用saveUsers as

    saveUsers<{success: boolean}>(model).then(data => {...})
    

    或者只是传递正在传递给的数据的接口。

    即使它不是 es6 承诺,也只需检查您返回的任何内容的类型。肯定会有一种方法来定义传递给 then 的数据类型。

    更新

    要添加到micronyks 的答案,如果您使用类似于axios 的内容在saveUsers 内执行网络调用,则返回的响应将具有this 格式,因此在您的情况下它将是data.data.success 在 then 块内

    【讨论】:

      【解决方案3】:

      如果我没记错的话,应该是,

      this._user.saveUsers(model).then(data => {
          if(data.data.success==true){                //<<<===changed
              this.router.navigate(['/user/list']);
          }else{
              console.log("data")
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 1970-01-01
        • 2017-01-14
        • 2017-10-21
        • 1970-01-01
        • 2017-12-20
        • 2016-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多