我正在尝试将摩根和温斯顿记录器一起使用。我收到以下错误。我使用了组合的预设格式。然后我想使用我的记录器记录请求。
[ts] '"combined"' 类型的参数不可分配给 'FormatFn' 类型的参数。
app.use(morgan("combined" {
stream(meta: any) {
this.log.info("Request served", meta);
},
objectMode: true,
}));
我正在尝试将摩根和温斯顿记录器一起使用。我收到以下错误。我使用了组合的预设格式。然后我想使用我的记录器记录请求。
[ts] '"combined"' 类型的参数不可分配给 '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;}
并且字段objectMode
根本不存在morgan.Options
(至少在没有增强的库存版本中,我没有安装Winston
)
下面的代码通过了编译器检查(请注意,我实际上并没有运行此代码,我不熟悉morgan
仅提供有关 typescript 类型错误的帮助):
morgan('combined', {
stream: {
write: (meta: any) => {
this.log.info("Request served", meta);
},
}
});