对象可能是未定义的VS Null断言运算符=>使用的正确方法是什么?

拉吉

我在下面有一个代码示例,在const cars = x.cars.filter()行中,我得到了一个错误对象,可能未定义x.cars。为了克服这个问题,我添加了一个if(x.cars)之类的if检查。通过添加此代码,我对此代码的代码覆盖范围因果单元测试存在问题。因此,我进行了研究,发现有一个Null断言运算符可以解决此打字稿编译器问题。在这种情况下可以使用Null断言运算符还是我需要考虑的其他事项?

this.carOptions$().pipe(
  map((result: any): string => {
    return result
      .filter(x => x.selected)
      .map(x => {
        if (x.cars) { //added this condition to overcome object is possibly undefined error
          const cars = x.cars
            .filter(x => x.selected)
            .map(x => x.name)
            .join(',');
          return `${x.name}~${cars}`;
        }
      })
  })
).subscribe(result => {
  this.result = result;
});

计划如下使用Null断言运算符

 const cars = x.cars!
            .filter(x => x.selected)
            .map(x => x.name)
            .join(',');
          return `${x.name}~${cars}`;
Pac0

使用!.运算符后提高测试代码覆盖率是一个谎言

我认为这不是好习惯。这可能很有用。它可能适合您的情况(如果您完全确定基础对象永远不会null),但是请不要将其视为灵丹妙药。

为什么这不是一个好习惯?因为如果对象为null/ undefined,则代码将以与您未使用此运算符完全相同的方式中断。但是编译器就像您的测试覆盖工具分析器一样,无法抱怨。

相关问答:键入安全导航运算符(?。)或(!。)的脚本,并输入null属性路径

从某种意义上说,使用null断言运算符可以简化您的代码。您跳过了if但是,如果cars.xnull,则带有的代码if不会引发错误,而另一个则会引发错误。注意这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打字稿:对象可能是“未定义”的,但仅适用于“ <”和“>”运算符

来自分类Dev

打字稿:对象可能是“未定义”的,但仅适用于“ <”和“>”运算符

来自分类Dev

使用安全运算符的Kotlin非null断言

来自分类Dev

在C ++中定义Typecast运算符模板的正确方法是什么

来自分类Dev

使用stringstream :: imbue和自定义全局运算符new进行的调试断言失败

来自分类Dev

使用“ in”运算符编译直方图的正确方法是什么?

来自分类Dev

Lua运算符,为什么未定义+ =,-=等?

来自分类Dev

Lua运算符,为什么未定义+ =,-=等?

来自分类Dev

为什么未定义“ +”运算符?爪哇

来自分类Dev

GCC不能使用未定义的运算符=

来自分类Dev

GCC不能使用未定义的运算符=

来自分类Dev

使用+ =运算符未定义对象中的第一个元素

来自分类Dev

Breeze.js-尝试使用“ any”运算符时出错-错误:无法获取属性'isAnonymous'的值:对象为null或未定义

来自分类Dev

使用散布和解构运算符修改不可变对象的最短方法是什么

来自分类Dev

三元运算中的对象可能是“未定义的”

来自分类Dev

TypeScript(err:2532):对象可能是未定义的,尽管有null / undefined检查

来自分类Dev

未定义参数类型的运算符!=,null

来自分类Dev

重载plus运算符的正确方法是什么?

来自分类Dev

Matlab:使用复数相乘-正确的运算符是什么?

来自分类Dev

使用JavaScript对DOM对象执行算术运算的正确方法是什么?

来自分类Dev

在Scala中使用运算符orElse的正确方法是什么?

来自分类Dev

在三元运算符期间对象可能未定义

来自分类Dev

C#使用自定义==运算符检查Class是否为Null

来自分类Dev

当与typeof运算符一起使用时,javascript null返回对象

来自分类Dev

为什么在通过逻辑运算符调用的函数中未定义“ this”?

来自分类Dev

这个运算符未定义有什么问题

来自分类Dev

在用户定义的类型和现有的类型之间定义现有的(例如Prelude)运算符的正确方法是什么?

来自分类Dev

使用std :: string定义运算符=

来自分类Dev

TypeError:无法使用“ in”运算符在未定义的位置搜索“ $ __ firebase”

Related 相关文章

  1. 1

    打字稿:对象可能是“未定义”的,但仅适用于“ <”和“>”运算符

  2. 2

    打字稿:对象可能是“未定义”的,但仅适用于“ <”和“>”运算符

  3. 3

    使用安全运算符的Kotlin非null断言

  4. 4

    在C ++中定义Typecast运算符模板的正确方法是什么

  5. 5

    使用stringstream :: imbue和自定义全局运算符new进行的调试断言失败

  6. 6

    使用“ in”运算符编译直方图的正确方法是什么?

  7. 7

    Lua运算符,为什么未定义+ =,-=等?

  8. 8

    Lua运算符,为什么未定义+ =,-=等?

  9. 9

    为什么未定义“ +”运算符?爪哇

  10. 10

    GCC不能使用未定义的运算符=

  11. 11

    GCC不能使用未定义的运算符=

  12. 12

    使用+ =运算符未定义对象中的第一个元素

  13. 13

    Breeze.js-尝试使用“ any”运算符时出错-错误:无法获取属性'isAnonymous'的值:对象为null或未定义

  14. 14

    使用散布和解构运算符修改不可变对象的最短方法是什么

  15. 15

    三元运算中的对象可能是“未定义的”

  16. 16

    TypeScript(err:2532):对象可能是未定义的,尽管有null / undefined检查

  17. 17

    未定义参数类型的运算符!=,null

  18. 18

    重载plus运算符的正确方法是什么?

  19. 19

    Matlab:使用复数相乘-正确的运算符是什么?

  20. 20

    使用JavaScript对DOM对象执行算术运算的正确方法是什么?

  21. 21

    在Scala中使用运算符orElse的正确方法是什么?

  22. 22

    在三元运算符期间对象可能未定义

  23. 23

    C#使用自定义==运算符检查Class是否为Null

  24. 24

    当与typeof运算符一起使用时,javascript null返回对象

  25. 25

    为什么在通过逻辑运算符调用的函数中未定义“ this”?

  26. 26

    这个运算符未定义有什么问题

  27. 27

    在用户定义的类型和现有的类型之间定义现有的(例如Prelude)运算符的正确方法是什么?

  28. 28

    使用std :: string定义运算符=

  29. 29

    TypeError:无法使用“ in”运算符在未定义的位置搜索“ $ __ firebase”

热门标签

归档