首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象可能是未定义的VS Null断言操作符=>,那么正确的使用方法是什么?

对象可能是未定义的VS Null断言操作符=>,那么正确的使用方法是什么?
EN

Stack Overflow用户
提问于 2020-03-24 09:48:08
回答 1查看 684关注 0票数 1

下面有一个代码示例,在const = x.cars.filter()行中,我得到了一个错误,对象可能是x.cars的未定义。为了克服这个问题,我添加了一个if检查,比如if(x.cars)。通过添加这一点,我对代码覆盖率、业力、单元测试有了问题。因此,我研究并发现有一个Null断言操作符来克服这个类型记录编译器的问题。在这个场景中使用Null断言操作符可以吗?或者还有什么需要考虑的?

代码语言:javascript
复制
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断言运算符如下

代码语言:javascript
复制
 const cars = x.cars!
            .filter(x => x.selected)
            .map(x => x.name)
            .join(',');
          return `${x.name}~${cars}`;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-26 00:35:41

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

我不认为这是很好的练习。这可能很有用。它可能适合您的情况(如果您完全确定基本对象永远不是null),但请不要将其视为银弹。

为什么这不是一个很好的练习?因为如果对象是null/undefined,您的代码就会以完全相同的方式中断,就好像您没有使用这个操作符一样。但是编译器无法抱怨,就像你的测试封面工具分析器一样。

相关问答:Typescript the safe navigation operator ( ?. ) or (!.) and null property paths

从某种意义上说,您的代码与空断言操作符相比要简单一些。你跳过了if。但是,如果cars.xnull,则带有if的代码不会抛出错误,而其他代码则会抛出错误。注意这件事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60828529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档