RxJS中校验BehaviorSubject交易数据是否存在的类型错误如何解决?
问题原因
- BehaviorSubject 泛型缺失:初始化
new BehaviorSubject([])时未指定<ITransaction[]>泛型,TypeScript默认推导其发射值类型为unknown[],和getTransactions()声明返回的Observable<ITransaction[]>类型不匹配,触发pipe操作符的类型校验错误。 - 三目运算符语法残缺:
results.length > 0 ? true仅定义了条件成立的返回值,缺少条件不成立时的返回分支,既不符合语法规范,也无法保证返回值为boolean类型,进一步加重类型报错。
修复方案
修复后的完整代码如下:
// 初始化时明确指定BehaviorSubject的泛型,保证类型匹配 private transactions = new BehaviorSubject<ITransaction[]>([]); getTransactions(): Observable<ITransaction[]> { return this.transactions.asObservable(); } checkTransactionsExist(): Observable<boolean> { return this.getTransactions().pipe( // 补全三目运算符的else分支,无需额外标注results类型,TS会自动推导为ITransaction[] map(results => results.length > 0 ? true : false) ); }
如果需要更简洁的写法,也可以将map内的逻辑替换为map(results => !!results.length),双重取反即可直接将数组长度的数字转为boolean值,效果完全一致。
内容的提问来源于stack exchange,提问作者Glen
相关产品推荐
相关产品推荐

