Javascript 实现具有匿名调用签名的接口

Javascript 实现具有匿名调用签名的接口,javascript,typescript,Javascript,Typescript,我正在尝试创建此接口的实例 interface Logger { (...args: any[]): void; error(...args: any[]): void; warn(...args: any[]): void; info(...args: any[]): void; verbose(...args: any[]): void; } i、 e它必须是可调用的,并且必须能够访问属性 const log: Logger = ...implementation //

我正在尝试创建此接口的实例

interface Logger {
  (...args: any[]): void;
  error(...args: any[]): void;
  warn(...args: any[]): void;
  info(...args: any[]): void;
  verbose(...args: any[]): void;
}
i、 e它必须是可调用的,并且必须能够访问属性

const log: Logger = ...implementation //this is what I am looking for
log('asd') // this should work
log.error('foo') // this should work

如何实现此行为?

解决方案与的相同。归功于

您可以通过创建一个立即调用的闭包来实现它。定义主方法并向其添加属性。下面的例子

const log=(函数(){
让main=function(){console.log(…参数);}
main.info=function(){console.log(…参数);};
main.error=function(){console.log(…参数);};
//…其他方法
回水总管;
})();
日志('asd')
log.info('这是info')

log.error(“这是错误”)
您是否更改了记录器中的Object.prototype.valueOf()本机实现?它不是我的记录器,而是“@azure/functions”记录器。我只是想模拟我的测试实现。请提供文档链接好吗?我找到了解决方案: