是否有ESLint规则可警示含假值类型变量的不严谨真值比较?
寻找可检测真值检查疏漏的ESLint规则
先看这段代码:
const onData = (value: boolean | undefined, cb: (data: boolean) => void) => { if (value) { cb(value); } }
显然,cb只会在value为真值时执行,但当value === false时不会触发回调。如果变量是number或string类型,这类问题会更严重——比如0或空字符串""都会被当作假值跳过逻辑,而这些值往往是业务中需要处理的有效数据。
这类疏漏源于用真值判断代替了精准的比较(比如应该用value === undefined),已经多次导致排查应用Bug的麻烦。
现在需要找到这样的ESLint规则:当对可能包含null、undefined、0、""、false、NaN这类假值的变量做真值检查时,自动发出警告。比如在以下代码的真值判断处给出提示:
const onData = (value: boolean | undefined, cb: (data: boolean) => void) => { if (value) { // <--- eslint warn: Compare with value instead of checking truthiness cb(value); } }
该规则需要同时适用于string、number等可能包含假值的类型。
存在对应的ESLint规则:如果你使用TypeScript,@typescript-eslint/strict-boolean-expressions 就是专门解决这类问题的规则。
这个规则会严格检查布尔表达式的上下文,当你在条件判断中直接使用可能包含非布尔假值的类型(比如boolean | undefined、string、number等)时,会触发警告,强制你进行更精准的比较。
你可以在ESLint配置中启用它,示例配置如下:
{ "rules": { "@typescript-eslint/strict-boolean-expressions": [ "error", { "allowNullableBoolean": false, "allowNullableString": false, "allowNullableNumber": false } ] } }
通过配置选项,你可以细化哪些类型的真值判断需要被限制,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Joliver
相关产品推荐
相关产品推荐

