在winston中为info方法添加缺少的签名

时间:2017-05-05 03:41:23

标签: typescript winston definitelytyped

我在打字稿中使用winston创建自定义记录器。 info方法应该处理作为对象的单个参数。不幸的是,在YetTyped中winston的类型不为info提供此签名。所以我尝试扩展界面以添加缺少的类型。但它没有被考虑在内。

编译时出现此错误:

example.ts(23,13): error TS2345: Argument of type '{ bar: string; demo: string; }' is not assignable to parameter of type 'string'.

第23行是logger.info(o)行。

我的源文件:

example.ts

/// <reference path="./expandWinston.d.ts"/>

import * as winston from "winston";

const logger = new winston.Logger({
  transports: [
    new (winston.transports.Console)({
      colorize: true,
      handleExceptions: true,
      humanReadableUnhandledException: true,
      json: false,
      prettyPrint: true,
      timestamp: true,
    }),
  ],
});

const o = {
  bar: "baz",
  demo: "foo",
};

logger.info(o);

expandWinston.d.ts

declare namespace winston {
  export interface LoggerInstance {
    info(meta: any): LoggerInstance;
  }
}

使用解决方案进行编辑:

expandWinston.d.ts中的最终代码:

import { LoggerInstance } from "winston";

declare module "winston" {
  interface LeveledLogMethod {
    (meta: any): LoggerInstance;
  }
}

1 个答案:

答案 0 :(得分:1)

你确定winston支持吗? 从他们的github页面看起来不像,但我看起来并不那么难。

在任何情况下,您都可以像这样更新编译器:

declare module "winston" {
    interface LeveledLogMethod {
        (meta: any): LoggerInstance;
    }
}