【问题标题】:Is there ESLint or TSLint rule that checks that truthy/falsy logical operator is not applied to numbers?是否有 ESLint 或 TSLint 规则检查真/假逻辑运算符是否适用于数字?
【发布时间】:2019-10-20 16:39:34
【问题描述】:

我今天遇到了一个错误,因为我的变量为 0,所以我意外地跳过了对函数的调用:

const foo: number | undefined = getFoo();
if(foo) {
   // Will not be called if foo is zero
   doSomething(foo);
}

这是我经常使用的一种模式,用于测试是否定义了变量。这适用于所有内容、对象、数组、字符串...除了数字。
这不是我第一次遇到这样的错误。

是否有规则会提醒我,例如:

if(foo)
   --- Warning, testing a number variable that can be defined, but equals to zero

强迫我写的东西:

if(foo !== undefined)

它不那么漂亮,但至少它有正确的行为。

编辑:考虑到这一点,似乎string 类型和值"" (空字符串)会出现同样的问题

【问题讨论】:

  • 您关心的情况是否只在if 内部,就像上面的代码一样?
  • 我不确定我是否完全理解您的问题,但是是的,通常我希望 linter 提醒我只有在 if 内。
  • 看起来不是太复杂,但是TSLint很快就下线了,而且我从来没有在ESLint上工作过,我不知道代码和TSLint相比如何(至少我知道代码一点)
  • 我认为 eslint 不会提供类型信息(如果 tslint 有的话),所以会相当复杂。
  • 您可能必须创建自己的规则。参考 eslint.org/docs/developer-guide/working-with-plugins 编写你自己的 ESLint 规则。

标签: javascript typescript numbers eslint lint


【解决方案1】:

tslint 拥有strict-boolean-expressions

【讨论】:

    【解决方案2】:

    对于 Typescript ESLint(因为 TSLint 已被弃用),有一条与 Zbigniew Zagórski 在另一个答案中提到的同名规则:strict-boolean-expressions

    猜你喜欢
    • 2020-06-05
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多