Typescript:实现具有 3 个不同签名的接口的方法?

Typescript: Method to implement an interface with 3 different signatures?

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

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

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

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

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

这样使用3个接口:

interface A {}
interface B {}
interface C {}

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

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

例如:

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 '';
}