我正在使用带有@types/winston 类型的winston 3.0。这些类型尚未完全兼容,并且我遇到了类型中的错误,我不知道如何纠正。
这是我的代码。
记录器.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 {
to this:
interface TransportInstance extends TransportStatic, NodeJS.EventEmitter, NodeJS.WriteStream {
但当然,我无法更改它,因为它是第 3 方依赖项,并且声明位于 node_modules 中。那么如何声明作为 npm 依赖项导入的接口呢?
我已经开始研究声明合并 https://www.typescriptlang.org/docs/handbook/declaration-merging.html:
记录器.d.ts
import * as winston from "winston";
export namespace winston {
export interface TransportInstance
extends winston.TransportInstance,
NodeJS.WriteStream {}
}
但这没有任何影响。我不确定如何将此接口导入到 logger.js 中,而不是导入 Winston 库时引入的接口。
Thanks