尝试禁用控制台方法时无法调用 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;
}
});
};
您的代码:
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
我想快速禁用代码中的所有控制台。[日志、时间、错误] 消息。 我知道 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;
}
});
};
您的代码:
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