Typescript: метод реализации интерфейса с 3 разными подписями?

Я пытаюсь обернуть функцию/метод, доступный в winston (структура входа в узел), я нашел его интерфейс

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

Я хотел бы реализовать метод под названием «ошибка», который будет принимать вышеуказанные подписи.

Я только оборачиваю его, поэтому я буду вызывать функцию winston напрямую.

Если кто-то знаком с winston, у меня в основном установлено 2 регистратора, и все потребители проходят через мой основной класс ведения журнала, и я использую либо 1-й регистратор, либо второй регистратор в зависимости от уровня ведения журнала, поэтому мне нужно его обернуть.


person Martin    schedule 04.08.2017    source источник
comment
Не понятно, о чем вы спрашиваете. Вы хотите иметь функцию error где? Это глобальный или метод класса, если последний, то для какого именно класса? Пожалуйста, предоставьте дополнительную информацию/код.   -  person Nitzan Tomer    schedule 04.08.2017


Ответы (2)


Используйте 3 интерфейса таким образом:

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

const variable: A|B|C = {};
person Lazyexpert    schedule 04.08.2017

Вы можете использовать дополнительные свойства и типы, чтобы добавить это в свою функцию, чтобы она соответствовала интерфейсу.

Например:

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 '';
}
person toskv    schedule 04.08.2017