“"combined"”类型的参数不可分配给 'FormatFn' 类型的参数

Argument of type '"combined"' is not assignable to parameter of type 'FormatFn'

我正在尝试将 morgan 与 winston logger 一起使用。我收到以下错误。我使用了组合的预设格式。然后我想使用我的记录器记录请求。

[ts] Argument of type '"combined"' is not assignable to parameter of type 'FormatFn'.

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

问题是传递给函数的第二个对象与为其声明的类型不匹配,即morgan.Options。因此,编译器会跳过以 'combine' 作为参数的重载,最终,当发现没有匹配的重载时,将选择最后一个重载来报告错误,给出一个相当混乱的错误消息。

您传入的对象字面量与 morgan.Options 不匹配,因为 stream 应该是 interface StreamOptions { write(str: string): void;} 类型并且 morgan.Options 上不存在字段 objectMode完全没有(至少不是没有增强功能的普通版本,我没有安装 Winston

下面的代码通过了编译器检查(注意我实际上没有 运行 这段代码,我不熟悉 morgan 只是提供打字稿类型错误的帮助):

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