如何在 Typescript 中向 Winston 记录器添加自定义函数?

问题描述

此问题与 Winston Logger 相关,但适用于任何其他情况。我有以下代码

import winston,{Logger} from 'winston';

interface CustomLogger extends Logger {
  setLoggerContext(userId: string): void;
}

const logger: CustomLogger = winston.createLogger({
  transports: [new winston.transports.Console()],});

logger.setLoggerContext = (userId: string) => {
  logger.defaultMeta = {userId: userId}
}

export default logger;

但是,const logger 是红色的,并显示一条错误消息:

属性“setLoggerContext”在“Logger”类型中缺失,但在“CustomLogger”类型中需要。ts(2741)

我想保护人们不要把他们想要的 defaultMeta 放在他们想要的东西上,我真的需要为此自定义函数,因为以后我们可能会用别的东西改变 winston,所以我想要一个自定义的上下文设置器。

解决方法

简单地一次构造两个接口的交集(TypeScript 看不出你最终构造了符合 CustomLogger 接口的东西,它考虑了 {{1} }行):

const logger: CustomLogger