类型' {}'在Angular2

时间:2016-09-26 17:46:34

标签: angular typescript

我使用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):error TS2339:Property' data'类型' {}'上不存在。 app / users / users.component.ts(76,25):错误TS2339:属性'成功'类型' {}'上不存在。

3 个答案:

答案 0 :(得分:3)

我不知道第33和34行,因为它们没有显示在你的代码中,但有76个你必须放

data: any

data: {success: any}

答案 1 :(得分:0)

如果我没错,应该是,

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

答案 2 :(得分:0)

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

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

您需要使函数接受泛型并将其传递给返回的promise(如

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

所以现在您可以简单地将saveUsers称为

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

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

即使它不是一个es6承诺,只需检查你返回的任何东西的类型。肯定会有一种方法来定义传递给那时的数据类型。

更新

要添加到micronyks的答案,如果您使用axios行内的某些内容在saveUsers内执行网络调用,则返回的响应将为this格式,所以在你的情况下,它将是data.data.success在then块