You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Observable的值 解决Subscription与number不可比较的TS报错

报错原因

这个TS类型报错的核心是你把 subscribe() 方法返回的 Subscription订阅对象 当成了数值类型使用,自然没法和数字做大小比较。具体有两个常见触发场景:

  • 场景1:你判断>0时用的是getAllDealsCount方法里定义的本地变量totalDeals,这个变量接收的是subscribe()的返回值,本身就是Subscription类型,和接口返回的合计值完全无关。
  • 场景2:你判断的是类属性this.totalDeals,但判断逻辑写在异步请求返回之前,或者你没有给类属性声明正确的数值类型,导致TS类型校验不通过。
修复方案

步骤1:先给类属性声明正确类型

首先在你的组件类里提前声明totalDeals的类型,给初始值避免未定义问题:

// 组件类内声明
totalDeals: number = 0;

步骤2:把大小判断逻辑放到异步回调里

接口请求是异步的,所有要用到totalDeals取值的逻辑都必须放到subscribe的回调函数里,不能写在getAllDealsCount()调用之后的同步代码里:

ngOnInit(): void {
  this.leaseId = this.transaction.leaseId;
  this.getAllDealsCount();
}

getAllDealsCount() {
  zip(this.getCount('ForApproval'),this.getCount('Draft'))
  .subscribe(res => {
    // 异步返回后再赋值+做逻辑判断
    this.totalDeals = res[0].data + res[1].data;
    // 你的大于0判断逻辑写在这里
    if (this.totalDeals > 0) {
      // 执行业务逻辑
    }
  })
}

private getCount(item: any) {
  let status = item;
  return this.dealService.getCount(
        this.accountId,
        this.transaction.id,
        status
  )
}

额外优化:添加取消订阅逻辑避免内存泄漏

可以把订阅对象存下来,在组件销毁时取消订阅:

// 类内先引入Subscription类型,再声明订阅对象
import { Subscription } from 'rxjs';
private dealCountSub?: Subscription;

getAllDealsCount() {
  this.dealCountSub = zip(this.getCount('ForApproval'),this.getCount('Draft'))
  .subscribe(res => {
    this.totalDeals = res[0].data + res[1].data;
    // 业务逻辑
  })
}

ngOnDestroy(): void {
  this.dealCountSub?.unsubscribe();
}

内容的提问来源于stack exchange,提问作者Agastya Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:48:04