类型 'Observable<boolean | {}>' 不能分配给单元测试中的类型 'Observable<boolean>' 错误



我有一个简单的服务,它发布数据并返回true,否则抛出错误。

首先通过getUserById获取用户数据,它返回Promise(User Derail(

然后 concatMap 并调用其他方法并返回结果 true!

// I want it's return type to be Observable<boolean>
saveUser(record: any): Observable<any> {
return from(this.getUserById(1))
.pipe(concatMap((data: any) => {
// Some other code....
return this.httpClient.post(`${this.API_URL}/users`, record)
.pipe(
map((result: any) => { 
console.log(result);
return true; 
}), 
catchError(error => this.handleError(error))
)
}));
}

我想要,它的返回类型是可观察的,但是当我更改为可观察布尔值时,立即开始出现错误。

刚刚在 [stackblitz.com/][1] 上创建了示例代码,看到我可以解决这个问题吗?

注意:除了saveUser(record: any),我无法更改任何方法

你可能会尝试做这样的事情:

myObs: Observable<boolean> = isUserAllowed()

this.utilityService.CheckFeature(userDetail);

返回Observable<boolean | {}>

所以myObs不知道当{}到达时会发生什么。

您需要将返回值转换为特定Observable<boolean>以便 TypeScript 知道。

像这样:

this.utilityService.CheckFeature(userDetail) as Observable<boolean>

检查这个: https://stackblitz.com/edit/angular-bw7hf2

最后,我使该函数像承诺一样工作,然后使用并使用from()包装整个函数以返回为可观察的。

isUserAllowed(): Observable<any> {
return from(this.getData().then((userDetail: UserData) => {
return this.utilityService.CheckFeature(userDetail); 
}), catchError(error => this.handleError(error)));

相关内容

最新更新