Аргумент типа «комбинированный» не может быть назначен параметру типа «FormatFn» - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь использовать Morgan вместе с Winston Logger. Я получаю следующую ошибку. Я использовал комбинированные предустановленные форматы. Затем я хочу зарегистрировать запрос, используя мой регистратор.

[ts] Аргумент типа «комбинированный» не может быть назначен параметру типа «FormatFn».

app.use(morgan("combined" {
    stream(meta: any) {
       this.log.info("Request served", meta);
    },
    objectMode: true,
}));

1 Ответ

0 голосов
/ 04 июля 2018

Проблема в том, что второй объект, переданный функции, не соответствует объявленному для нее типу, который равен morgan.Options. Из-за этого компилятор пересекает перегрузку с 'combine' в качестве аргумента и, в конечном счете, при обнаружении несоответствующей перегрузки выберет последнюю перегрузку, чтобы сообщить об ошибке, выдавая довольно запутанное сообщение об ошибке.

Литерал объекта, который вы передаете, не соответствует morgan.Options, потому что stream должен иметь тип interface StreamOptions { write(str: string): void;}, а поле objectMode вообще не существует на morgan.Options (по крайней мере, в стандартной версии с дополнения, я не установил Winston)

Приведенный ниже код проходит проверки компилятором (обратите внимание, что я на самом деле не запускал этот код, я не знаком с morgan, просто предоставляющим справку об ошибке типа машинописного текста):

morgan('combined', {
    stream: {
        write: (meta: any) => {
           this.log.info("Request served", meta);
        },
    }
});
...