【发布时间】: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