Angular管道返回Observable<boolean>报TS2322类型错误问题求助
Angular管道TS2322类型报错修复方案
错误根源
代码存在4个问题共同触发该报错:
map操作符回调函数无显式返回值,导致返回值类型为void,和声明的boolean不匹配,是TS2322报错的直接原因forEach循环无返回值,在forEach内部写的return仅会终止当前次迭代,既不会跳出循环也不会向外层返回判断结果- 空输入场景直接返回
null,不符合方法声明的Observable<boolean>返回类型要求 - 存在变量名笔误:循环调用的
Elem未定义,正确的入参变量名为antwortElem
修复后代码
import { of } from 'rxjs'; import { map } from 'rxjs/operators'; transform(antwortElem: UiKat[]): Observable<boolean> { if(!antwortElem){ // 空输入场景按业务需求返回of(true)/of(false)即可,这里示例返回false return of(false); } return this.service.enabledState$.pipe( map(enabledState => { // 用Array.some()实现「存在符合条件元素即返回true」的需求,匹配业务逻辑 return antwortElem.some(antwort => { return enabledState[antwort.id] ?? true; }) }) ) }
逻辑说明
Array.some() 方法会遍历数组,只要有一个元素的回调返回true就会终止遍历并直接返回true,完全匹配「校验是否存在值为true的元素,存在即返回true」的功能需求,替代无效的forEach实现。
内容的提问来源于stack exchange,提问作者Felipe Livingstone
相关产品推荐
相关产品推荐

