我在打字稿中使用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;
}
}
答案 0 :(得分:1)
你确定winston支持吗? 从他们的github页面看起来不像,但我看起来并不那么难。
在任何情况下,您都可以像这样更新编译器:
declare module "winston" {
interface LeveledLogMethod {
(meta: any): LoggerInstance;
}
}