【问题标题】:Typescript: Method to implement an interface with 3 different signatures?Typescript:实现具有 3 个不同签名的接口的方法?
【发布时间】:2018-05-12 07:01:28
【问题描述】:

我正在尝试包装winston(节点登录框架)中可用的函数/方法,我找到了它的接口

interface LeveledLogMethod {
    (msg: string, callback: LogCallback): LoggerInstance;
    (msg: string, meta: any, callback: LogCallback): LoggerInstance;
    (msg: string, ...meta: any[]): LoggerInstance;
}

我想实现一个名为“error”的方法,该方法将采用上述签名。

我只是包装它,所以我将直接调用winston函数。

如果有人熟悉 winston,我基本上设置了 2 个记录器,所有消费者都通过我的主要记录类,我根据日志级别使用第一个记录器或第二个记录器,所以我需要包装它。

【问题讨论】:

  • 不清楚你在问什么。你想在哪里有一个error 函数吗?它是全局方法还是类方法,如果是后者,那么究竟是哪个类?请提供更多信息/代码。

标签: node.js typescript winston


【解决方案1】:

您可以使用可选属性和类型将其添加到您的函数中,使其与接口相匹配。

例如:

interface LeveledLogMethod {
    (msg: string, callback: () => void): string;
    (msg: string, meta: any, callback: () => void): string;
    (msg: string, ...meta: any[]): string;
}

let error: LeveledLogMethod = function (msg: string, b: () => void | any, c?: () => void): string {
    return '';
}

【讨论】:

    【解决方案2】:

    以这种方式使用 3 个接口:

    interface A {}
    interface B {}
    interface C {}
    
    const variable: A|B|C = {};
    

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2011-07-26
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2013-07-03
      相关资源
      最近更新 更多