web-dev-qa-db-ja.com

タイプスクリプトで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'.

winston@types/winstonの両方をプロジェクトに追加しました。


編集:ジョシュアの回答を完了するには、デフォルトでwinstonが...どこにもログを記録していないようです。動作させるにはトランスポートを追加する必要があります。

import * as logger from "winston";

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

Winstonの型定義は次のとおりです。

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

ファイルの一番下を見ると、デフォルトのエクスポートはconstとして宣言されているため、levelプロパティを変更しようとすると、constオブジェクトを変更しようとしているため、不平を言っています。関連する行は次のとおりです。

declare const winston: winston.Winston;
export = winston;

そのプロパティを直接設定しようとする代わりに、configureメソッドを使用してみてください(loggerインポートはWinston型であることに注意してください:

logger.configure({
    level: 'verbose',
    ...
})

これが機能しない場合(configure呼び出しが他に何を期待しているのか正確にはわかりません)、新しいLoggerInstanceを作成してみて、変更することができます。

2番目のエラーは、Errorが必要なstringオブジェクトを渡すためです。 Winston.infoの宣言は次のとおりです。

info: LeveledLogMethod;

次に、LeveledLogMethodインターフェースを示します。

interface LeveledLogMethod {
    (msg: string, callback: LogCallback): LoggerInstance;
    (msg: string, meta: any, callback: LogCallback): LoggerInstance;
    (msg: string, ...meta: any[]): LoggerInstance;
}
7
Joshua Breeden