反应形式combineLatest对象可能为null或未定义

时间:2019-11-22 09:26:39

标签: angular typescript rxjs

我想根据其他两个控件更改FormArrray的值。

我认为我已经进行了所有必要的检查,但打字稿指出了st和sp

  

对象可能为空

此代码有什么问题?

let starterChanges$ = of(null);
    const starter = this.frm.get('starter');
    if (starter) {
      starterChanges$ = starter.valueChanges;
    }
    let spreadChanges$ = of(null);
    const spread = this.frm.get('spread');
    if (spread) {
      spreadChanges$ = spread.valueChanges;
    }
this.subscription.add(
      combineLatest([starterChanges$, spreadChanges$]).subscribe(([st, sp]) => {
        let current = 0;
        if (st !== null && sp !== null) {
          for (const control of this.orders.controls) {
            if (!current) {
              current = current + st + sp;
            } else {
              current = current + sp;
            }
            control.patchValue({ spread: current });
            control.disable();
          }
        }
      })
    );

3 个答案:

答案 0 :(得分:1)

这种情况很可能是问题所在

if (!current) {
  current = current + st + sp;
}

如果!current,如何在+操作中使用它?这将导致诸如null + st + sp之类的情况,这应该是什么结果?

答案 1 :(得分:0)

尝试下一个检查:

if (st && sp) { ... }

您正在检查它是否为null,但可以不确定。

答案 2 :(得分:0)

(代表OP发布,以将问题的答案移出问题帖)

我用以下方法解决了这个问题:

([st = 0, sp = 0])