Typescript 类型为'的参数&引用;“合并”';不可分配给类型为';格式fn';

Typescript 类型为'的参数&引用;“合并”';不可分配给类型为';格式fn';,typescript,winston,morgan,Typescript,Winston,Morgan,我正试图利用摩根和温斯顿·洛格。我得到以下错误。我使用了组合的预设格式。然后,我想使用我的记录器记录请求 [ts]类型为“combined”的参数不能分配给类型为“FormatFn”的参数 问题是传递给函数的第二个对象与为其声明的类型不匹配,即morgan.Options。因此,编译器会以'combine'作为参数越过重载,最终,当发现没有匹配的重载时,会选择最后一个重载来报告错误,给出一条相当混乱的错误消息 您传入的对象文本与morgan.Options不匹配,因为stream的类型应为int

我正试图利用摩根和温斯顿·洛格。我得到以下错误。我使用了组合的预设格式。然后,我想使用我的记录器记录请求

[ts]类型为“combined”的参数不能分配给类型为“FormatFn”的参数


问题是传递给函数的第二个对象与为其声明的类型不匹配,即
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);
        },
    }
});