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

问题描述 投票:1回答:1

我下面有一个代码示例,在第[[const cars = x.cars.filter()]行中),我收到x.cars的错误object is undefined]。为了克服这个问题,我添加了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; });

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

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

我下面有一个代码示例,在const cars = x.cars.filter()行时,我得到了x.cars可能未定义错误对象的信息。为了克服这个问题,我添加了if(x.cars)之类的if检查。由...
angular typescript karma-jasmine
1个回答
0
投票
我认为这不是好习惯。这可能是有用的。它可能适合您的情况(如果您完全确定基本对象永远不会是null,则请不要将其视为灵丹妙药。)>

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

© www.soinside.com 2019 - 2024. All rights reserved.