在第三方库中重新声明不正确的TypeScript类型

在第三方库中重新声明不正确的TypeScript类型,typescript,npm,typescript-typings,Typescript,Npm,Typescript Typings,我将winston 3.0与@types/winston types一起使用。这些类型尚未完全兼容,我在类型中遇到了一个错误,我不知道如何更正 这是我的密码 logger.ts export function middleware(): express.Handler { const transport = new winston.transports.Console({ json: true, colorize: true, string

我将winston 3.0与@types/winston types一起使用。这些类型尚未完全兼容,我在类型中遇到了一个错误,我不知道如何更正

这是我的密码

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);
}
import * as winston from "winston";

export namespace winston {
    export interface TransportInstance
        extends winston.TransportInstance,
            NodeJS.WriteStream {}
}
loggerOptions上的ts错误为

类型“TransportInstance”中缺少属性“writable”

如果我用NodeJS.WriteStream扩展@types/winston中的TransportInstance接口,问题就解决了。i、 e.改变这一点:

interface TransportInstance extends TransportStatic, NodeJS.EventEmitter {
为此:

interface TransportInstance extends TransportStatic, NodeJS.EventEmitter, NodeJS.WriteStream {
但当然,我不能改变这一点,因为这是一个第三方依赖关系,并且声明在node_模块中。那么,如何重新声明作为npm依赖项导入的接口

我已经开始调查:

logger.d.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);
}
import * as winston from "winston";

export namespace winston {
    export interface TransportInstance
        extends winston.TransportInstance,
            NodeJS.WriteStream {}
}
但这没有任何影响。我不知道如何将此接口导入logger.js,而不是导入winston库时所提供的接口

谢谢

尝试使用。这对我很有用:

declare module "winston" {
    interface TransportInstance extends NodeJS.WriteStream {}
}

没有,但我可能做错了。我已将您的代码添加到logger.d.ts。我使用TransportInstance的函数位于logger.ts中。我没有明确地将任何内容导入logger.ts。我应该吗?我还尝试将您的代码直接添加到logger.ts中,但这也不起作用。我测试过,它在没有名称空间的情况下对我有效,尽管我不太明白这里发生了什么。编辑了答案。