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
})
]
});
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;
}