我正在将Winston 3.0与@ types / winston类型一起使用。这些类型尚不完全兼容,并且在我不知道如何更正的类型中遇到了错误。
这是我的代码。
logger.ts
export function middleware(): express.Handler {
const transport = new winston.transports.Console({
json: true,
colorize: true,
stringify: getStringify()
});
const loggerOptions: expressWinston.LoggerOptionsWithTransports = {
transports: [transport],
meta: true,
msg: "HTTP {{req.method}} {{req.url}}",
expressFormat: true,
colorize: false
};
return expressWinston.logger(loggerOptions);
}
loggerOptions上的ts错误是
“ TransportInstance”类型中缺少属性“可写”
如果我使用NodeJS.WriteStream在@ types / winston中扩展TransportInstance接口,则该问题已解决。即更改此内容:
interface TransportInstance extends TransportStatic, NodeJS.EventEmitter {
对此:
interface TransportInstance extends TransportStatic, NodeJS.EventEmitter, NodeJS.WriteStream {
但是,当然,我无法更改它,因为它是第三方的依赖关系,并且声明位于node_modules中。那么如何重新声明作为npm依赖项导入的接口?
我已经开始研究Declaration Merging:
logger.d.ts
import * as winston from "winston";
export namespace winston {
export interface TransportInstance
extends winston.TransportInstance,
NodeJS.WriteStream {}
}
但这没有任何影响。我不确定如何将此接口导入logger.js,而不是导入Winston库时出现的接口。
谢谢
答案 0 :(得分:0)
尝试使用module augmentation。这对我有用:
declare module "winston" {
interface TransportInstance extends NodeJS.WriteStream {}
}