您如何声明可随后(承诺)的类型?

时间:2019-03-10 00:38:05

标签: angular typescript

我有一个返回承诺的函数:

const counterAccount = this.accountsService.getFirestoreLinked('mas-accounts', this.selectedRelations[idx].accountId);
    counterAccount.then(result => {
        console.log(result);
    });

结果在控制台中如下所示:

enter image description here

我想将一个变量设置为等于这样的元素的值:

const state = result.mas.accountSettings.status;

但是,我收到一个Angular“类型”错误,“属性'mas'在类型'void'上不存在。”

我以前遇到过此错误,可以通过声明变量类型来解决。但是,我无法弄清楚如何声明promise的变量类型。我已经尝试了result <>和结果:{mas:{}},但这不起作用。

result [“ mas”]起作用了,但是tslint对此并不满意,我全都希望tslint感到满意。有人可以告诉我如何设置Promise的数据类型吗?

1 个答案:

答案 0 :(得分:1)

您不必在 counterAccount 上声明类型。您可以在结果上声明类型。

例如:

// result.ts
export interface IResult {
 address: IAddress;
 birthdays: { text: string};
 mas: IMas;
}

interface IMas {
 accountSetting: {
 billing: boolean;
 gender: string;
 member: boolean;
 status: string;
}
}

现在在结果上声明类型

const counterAccount = this.accountsService.getFirestoreLinked('mas-accounts', this.selectedRelations[idx].accountId);
    counterAccount.then((result: IResult) => {
        console.log(result);
    });

至于您的tslint对使用result ['mas']感到不满意,这是因为tslint.ts或tsconfig.ts中有一个特定的规则(我不记得是哪个规则)。您可以从配置中删除该规则,但是我建议您不要这样做,因为该规则存在于项目中,以遵循特定的标准。