web-dev-qa-db-fra.com

Utiliser Winston en tapuscrit

Je ne sais pas comment utiliser le module de journalisation Winston en TypeScript. J'ai une erreur lorsque j'essaie de définir le niveau de l'enregistreur et une autre lorsque j'essaie d'enregistrer une erreur:

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'.

J'ai ajouté à la fois winston et @types/winston à mon projet.


Edit: pour terminer la réponse de Joshua, il semble que par défaut Winston se connecte à ... nulle part. Vous devez ajouter un transport pour le faire fonctionner:

import * as logger from "winston";

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

Voici les définitions de type pour Winston:

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

Si vous regardez au bas du fichier, l'exportation par défaut est déclarée comme const, donc lorsque vous essayez de modifier la propriété level, elle se plaint de vous parce que vous essayez de modifier un const objet. Voici les lignes pertinentes:

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

Au lieu d'essayer de définir cette propriété directement, essayez d'utiliser la méthode configure (notez que votre importation logger est de type Winston:

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

Si cela ne fonctionne pas (je ne sais pas exactement à quoi d'autre l'appel de configuration s'attend), vous pouvez essayer de créer un nouveau LoggerInstance, que vous pourrez modifier.

Votre deuxième erreur est due au fait que vous passez un objet Error où un string est attendu. La déclaration de Winston.info est ici:

info: LeveledLogMethod;

Et voici l'interface LeveledLogMethod:

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