检查 TypeScript 数字上是否为 null 和空字符串的最简单方法

问题描述 投票:0回答:5

我很惊讶这个问题没有被问到,所以也许我忽略了显而易见的事情。我有一个应该是数字的表单字段。它的起始值为空,但是一旦输入并清除数字,它就是一个空字符串。看起来 JavaScript 将“”视为数字目的的 0。

所以,与其说...

if ((this.RetailPrice != null && this.RetailPrice != 0) || this.RetailPrice === 0) {
        return this.RetailPrice;
      }

有没有办法扩展 TypeScript 数字类型以具有 IsNullOrEmpty() 方法?或者类似的东西可以简化这个表达式?


最终,我想我正在寻找一些简单的东西......

if (this.RetailPrice) {

}
typescript
5个回答
48
投票

您可以简单地使用 typeof 。它还会检查 undefined、null、0 和 ""。

if(typeof RetailPrice!='undefined' && RetailPrice){
   return this.RetailPrice;
}

22
投票

也排除空白字符串

if(this.retailPrice && this.retailPrice.trim()){
   //Implement your logic here
}


0
投票

数字字段需要一些不同的条件: if (typeof(numValue) === '未定义' || numValue == null) { ... }


0
投票

对于希望区分虚假和非虚假的打字稿用户,并且愿意安装(小)包,我发现 utility-types 非常有用。

import { isFalsy } from 'utility-types'

if (!isFalsy(foo)) {
  // do something with foo, which you (and the compiler)
  // know is not false | "" | 0 | null | undefined
}

0
投票

我可能错误地解释了你的问题,但似乎数字,包括

0
,不应该被视为空或空。一个非常紧凑且注重防御性编码的检查,以允许数字并排除其他所有内容,将使用可选链接和字符串匹配的组合,如下所示:

let check = !!this.RetailPrice?.toString()?.match(/^\d+$/);

这是输入测试套件结果的屏幕截图:

test results in console

此方法具有通过布尔类型强制返回布尔值的额外优势如此处所述

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