我有一个从服务中获取信息的组件,我想使用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的类型将与提供的元组相同