比较可能为零值与大于

Idiomatic way to compare possibly-null value with greater than

提问人:Steve Bennett 提问时间:3/8/2023 最后编辑:Steve Bennett 更新时间:3/8/2023 访问量:364

问:

Typescript 抱怨这种形式的表达式:

if (foo?.length > 3) {

说这可能是未定义的 (TS18048) ,这是真的。但如果它是真的,那么将计算为 ,它不会大于 3,这就是我想要的行为。foofoo?.lengthundefined

有没有一种惯用的方法可以让 TypeScript 放心?

我可以做,但在这种情况下,是一个相当长的表达。if (foo && foo.length > 3)foo

JavaScript 打字稿 比较

评论

0赞 Bergi 3/8/2023
它不应该抱怨存在(由 处理),而应该抱怨将可能的值与数字进行比较。foonull?.undefined
0赞 Steve Bennett 3/8/2023
是的,我的释义有点松散

答:

1赞 Bergi 3/8/2023 #1

惯用的 TypeScript 确实是显式测试:null

if (foo != null && foo.length > 3)

如果是一个较长的表达式,请为其声明一个新变量,无论如何,您可能也会在块内重用该变量。fooif

但是,如果这确实不符合您的需求,则可以使用 nullish 合并来获取 TypeScript 接受用于数值比较的值:

if (foo?.length ?? 0 > 3)

对于数组的长度,似乎是一个合理的默认值,对于其他任何内容,您也可以使用 or .0+Infinity-Infinity