能否在TypeScript中禁用TS(1345)对应的规则?
TypeScript真值检查错误的规避方案
问题
TypeScript 会针对如下合法调试代码抛出错误:An expression of type 'void' cannot be tested for truthiness.ts(1345):
const getFooPlusTwo = (foo) => console.log(foo) || foo + 2;
虽然有添加+、,等各种变通方法,但并非所有场景都适用,且这些操作毫无益处——JavaScript无需这些就能正常运行。大多数TypeScript规则都可关闭,请问是否存在可禁用的TypeScript或ESLint规则来避免该错误?
回答
没有办法单独禁用这个错误对应的TypeScript规则或ESLint规则,因为这是TypeScript类型检查的核心逻辑:console.log()的返回类型被标记为void,而TypeScript不允许对void类型的值做真值判断(比如用||、&&这类逻辑运算符),这属于类型系统的基础约束,不是可单独开关的规则。
如果只是临时调试用,最快的解决方式是用类型断言把console.log()的返回值强行转成any,绕过类型检查:
const getFooPlusTwo = (foo) => (console.log(foo) as any) || foo + 2;
或者换一种更清晰的写法,拆分日志和返回逻辑,完全避开类型问题:
const getFooPlusTwo = (foo) => { console.log(foo); return foo + 2; };
要是你硬要彻底规避这类检查,只能降低TypeScript的整体严格度,比如把tsconfig.json里的strict字段设为false,但这会关掉很多有用的类型校验,严重削弱TypeScript的价值,非常不推荐。
内容的提问来源于stack exchange,提问作者machineghost
相关产品推荐
相关产品推荐

