问题描述
此问题与 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