Typescript 类型为'的参数&引用;“合并”';不可分配给类型为';格式fn';
我正试图利用摩根和温斯顿·洛格。我得到以下错误。我使用了组合的预设格式。然后,我想使用我的记录器记录请求 [ts]类型为“combined”的参数不能分配给类型为“FormatFn”的参数Typescript 类型为'的参数&引用;“合并”';不可分配给类型为';格式fn';,typescript,winston,morgan,Typescript,Winston,Morgan,我正试图利用摩根和温斯顿·洛格。我得到以下错误。我使用了组合的预设格式。然后,我想使用我的记录器记录请求 [ts]类型为“combined”的参数不能分配给类型为“FormatFn”的参数 问题是传递给函数的第二个对象与为其声明的类型不匹配,即morgan.Options。因此,编译器会以'combine'作为参数越过重载,最终,当发现没有匹配的重载时,会选择最后一个重载来报告错误,给出一条相当混乱的错误消息 您传入的对象文本与morgan.Options不匹配,因为stream的类型应为int
问题是传递给函数的第二个对象与为其声明的类型不匹配,即
morgan.Options
。因此,编译器会以'combine'
作为参数越过重载,最终,当发现没有匹配的重载时,会选择最后一个重载来报告错误,给出一条相当混乱的错误消息
您传入的对象文本与morgan.Options
不匹配,因为stream
的类型应为interface StreamOptions{write(str:string):void;}
并且morgan.Options上根本不存在字段objectMode
(至少不是在没有扩展的股票版本中,我没有安装Winston
)
下面的代码通过了编译器检查(注意,我并没有实际运行这段代码,我不熟悉morgan,只是提供了关于typescript类型错误的帮助):
这是有道理的,这似乎解决了我的问题,但我有一个后续问题,即
this.log
在此对象函数中未定义。`Cannot read property'info'of undefined\n peerror:Cannot read property'info'of undefined`@Kay wops,yes,因为您想从声明上下文中this
最好使用箭头函数爱雍,太爱你了,修好了!
app.use(morgan("combined" {
stream(meta: any) {
this.log.info("Request served", meta);
},
objectMode: true,
}));
morgan('combined', {
stream: {
write: (meta: any) => {
this.log.info("Request served", meta);
},
}
});