TypeScript + Angular:未找到具有 'string' 类型参数的索引签名



我有一个从服务中获取信息的组件,我想使用forEach语句来初始化组件的属性。这不起作用:

const variables = ['records' ,'observableComplete' ]
variables.forEach(variable => {
this.user2RoleService[variable].subscribe( result => { this[variable] = result})
});

但这确实有效(但我应该一个接一个地做(

const variable = 'observableComplete'
this.user2RoleService[variable].subscribe( result => { this[variable] = result})

有什么想法可以解决吗?

您应该使用this((而不是[]。

const variables = ['records' ,'observableComplete' ]
variables.forEach(variable => {
this.user2RoleService(variable).subscribe( result => { this[variable] =result})
});

我假设您的user2RoleService是类User2RoleService的实例。因此,这种类型声明应该做:

const variables: (keyof User2RoleService)[] = ['records', 'observableComplete'];

恐怕在严格模式下,您需要一个"丑陋的黑客;

const variables = ['records', 'observableComplete'];
const self=this as any  //<--this is the uggly hack
variables.forEach((variable: string) => {
self.user2RoleService[variable].subscribe((result: any) => {
self[variable]=result;
console.log(this.records,this.observableComplete) //<--only for check
});
});

执行赋值类型脚本的方式将其推断为string[],但是您可以在as const的帮助下对其进行改进。只需进行

const variables = ['records' ,'observableComplete' ] as const;

则CCD_ 5的类型将与提供的元组相同

相关内容

最新更新