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

时间:2018-08-07 19:37:09

标签: typescript npm typescript-typings

我正在将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库时出现的接口。

谢谢

1 个答案:

答案 0 :(得分:0)

尝试使用module augmentation。这对我有用:

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