我有一个返回承诺的函数:
const counterAccount = this.accountsService.getFirestoreLinked('mas-accounts', this.selectedRelations[idx].accountId);
counterAccount.then(result => {
console.log(result);
});
结果在控制台中如下所示:
我想将一个变量设置为等于这样的元素的值:
const state = result.mas.accountSettings.status;
但是,我收到一个Angular“类型”错误,“属性'mas'在类型'void'上不存在。”
我以前遇到过此错误,可以通过声明变量类型来解决。但是,我无法弄清楚如何声明promise的变量类型。我已经尝试了result <>和结果:{mas:{}},但这不起作用。
result [“ mas”]起作用了,但是tslint对此并不满意,我全都希望tslint感到满意。有人可以告诉我如何设置Promise的数据类型吗?
答案 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中有一个特定的规则(我不记得是哪个规则)。您可以从配置中删除该规则,但是我建议您不要这样做,因为该规则存在于项目中,以遵循特定的标准。