在打字稿中使用Winston

Chr*_*ais 8 winston typescript

我无法想象如何在打字稿中使用记录模块Winston.我尝试设置记录器级别时出错,而当我尝试记录错误时出现另一个错误:

import * as logger from "winston";

logger.level = 'debug';
// [ts] Cannot assign to 'level' because it is a constant or a read-only property.

logger.error(new Error('test'));
// [ts] Argument of type 'Error' is not assignable to parameter of type 'string'.
Run Code Online (Sandbox Code Playgroud)

我已经加入既winston@types/winston我的项目.


编辑:完成约书亚的回答,似乎默认情况下,温斯顿登录到......无处可去.您必须添加一个传输才能使其工作:

import * as logger from "winston";

logger.configure({
    level: 'debug',
    transports: [
        new logger.transports.Console({
            colorize: true
        })
    ]
});
Run Code Online (Sandbox Code Playgroud)

Jos*_*den 7

以下是Winston的类型定义:

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/winston/index.d.ts

如果查看文件的底部,默认导出被声明为const,所以当您尝试修改level属性时,它会向您抱怨,因为您正在尝试修改const对象.以下是相关部分:

declare const winston: winston.Winston;
export = winston;
Run Code Online (Sandbox Code Playgroud)

而不是尝试直接设置该属性,尝试使用该configure方法(请注意您的logger导入类型Winston:

logger.configure({
    level: 'verbose',
    ...
})
Run Code Online (Sandbox Code Playgroud)

如果这不起作用(我不确定配置调用预期的其他内容),您可以尝试创建一个新的LoggerInstance,您可以修改它.

你的第二个错误是因为你传递了Error一个string预期的对象.Winston.info的声明如下:

info: LeveledLogMethod;
Run Code Online (Sandbox Code Playgroud)

这是LeveledLogMethod界面:

interface LeveledLogMethod {
    (msg: string, callback: LogCallback): LoggerInstance;
    (msg: string, meta: any, callback: LogCallback): LoggerInstance;
    (msg: string, ...meta: any[]): LoggerInstance;
}
Run Code Online (Sandbox Code Playgroud)