尝试禁用控制台方法时无法调用 TypeScript 表达式

TypeScript expression is not callable when trying to disable console methods

我想快速禁用代码中的所有控制台。[日志、时间、错误] 消息。 我知道 what has been asked before for javascript。但是 Typescript 在下面抱怨我的“解决方案”:

    const konsole = {
        log:()=>{},
        time:()=>{},
        timeEnd:()=>{},
        error:()=>{}
    }
    (!dev) && console = konsole

其中 dev 是一个布尔值,当我处于开发模式时为真。

打字稿投诉:This expression is not callable.我不明白投诉,我应该怎么做。

您可以创建一个函数来迭代 console 属性并覆盖方法:

const noop = (...args: any[]): any => {};

const disable = (con: Console) => {
  (Object.keys(con) as (keyof Console)[])
    .forEach((key) => {
      if(typeof con[key] === "function" ) {
        con[key] = noop;
      }
    });
};

working example

您的代码:

    const konsole = {
        log:()=>{},
        time:()=>{},
        timeEnd:()=>{},
        error:()=>{}
    }
    (!dev) && console = konsole

解释为:

    const konsole = ({
        log:()=>{},
        time:()=>{},
        timeEnd:()=>{},
        error:()=>{}
    }(!dev) && console = konsole);

您正在尝试将对象作为函数调用,这就是 TypeScript 警告您注意此运行时错误的原因。

您可以使用分号或删除 !dev:

两边的括号
    const konsole = {
        log:()=>{},
        time:()=>{},
        timeEnd:()=>{},
        error:()=>{}
    }; // here
    !dev && console = konsole // or no parens here