代码之家  ›  专栏  ›  技术社区  ›  machineghost

TypeScript:是否有可能禁用TS背后的规则(1345)

  •  0
  • machineghost  · 技术社区  · 11 月前

    TypeScript将抛出一个错误(“无法测试'void'类型的表达式的truthiness.ts(1345)”),并使用有效的调试代码,如:

    const getFooPlusTwo = (foo) => console.log(foo) || foo + 2;
    

    有各种各样的技巧可以解决这个问题(添加 + , , 等等),但它们并非在所有情况下都有效。。。更重要的是,它们是没有好处的不必要的工作(没有它们,JS可以很好地工作)。

    大多数TypeScript规则都可以关闭。是否有任何TypeScript(或ESLint)规则可以禁用,以使TypeScript不会抛出这些错误?

    2 回复  |  直到 11 月前
        1
  •  2
  •   Josh Marcus    11 月前

    您将无法禁用此打字规则, console.log 返回void,并且不能在真实性检查中使用void表达式。

    另一种选择是使用逗号运算符拆分日志并返回值。逗号运算符计算其每个操作数(从左到右),并返回最后一个操作数的值。

    export const getFooPlusTwo = (foo: number) => (console.log(foo), foo + 2);
    
        2
  •  0
  •   STerliakov Iver Finne    11 月前

    您可以增强全局控制台对象,使其方法返回 undefined 而不是 void 从那以后就安全了 console.log 真的回来了 未定义 无条件。仅此而已(您也可以在此处添加其他控制台方法):

    declare global { 
       interface Console { 
          log(msg: any, ...args: any[]): undefined; 
       } 
    }
    
    const getFooPlusTwo = (foo: string) => console.log(foo) || foo + 2;
    

    Playground Link (读 this 理解 declare global ,你可能需要它,但在操场上不需要)。

    这通常不允许使用 无效 在这种布尔链中,这可能很好:如果你接受一个返回的回调 无效 ,您可能会在无意中使用它 callback() || 'something' 当回调返回时,你会感到失望 1 .

    function test(callback: () => void) {
        return callback() || 'something'
    }
    test(() => 1)
    

    “无法测试'void'类型的表达式的真实性”是typescript为上述代码段引发的唯一错误,因此禁用它可能真的会接受损坏的代码。