Typescript如何使公共静态成员变量可读

问题描述

我正在使用打字稿和Winston进行日志记录来编写节点应用程序。

我用“ logger”成员和“ init()”成员函数创建了一个“ Logger”类。在导出“ Logger”类时,我知道我们可以在另一个文件中访问“ logger”成员。

import winston from "winston";

class Logger {

    public static logger: any;

    public static init():any {
    this.logger = winston.createLogger({
        level: 'info',format: winston.format.json(),defaultMeta: { service: 'user-service' },transports: [              
          new winston.transports.File({ filename: 'error.log',level: 'error' }),new winston.transports.File({ filename: 'combined.log' }),],});
}

export default Logger;

我正在按以下方式访问此Logger类。

import Logger from './Logger'

Logger.init();
//access logger member here...

使用Logger.init()初始化“ logger”成员后,我希望“ logger”成员仅可读。有可能这样做吗?

解决方法

如果您想要在整个应用程序中保持Winston的配置不变,则解决方案可能是:

import winston,{ Logger as WinstonLogger } from 'winston'; // Rename the original interface from winston

export type Logger = Pick<WinstonLogger,'log'>; // Create a new interface that only exposes the `log` method

const logger: Logger = winston.createLogger({...}) // Configure your winston instance

export default logger; // Now methods other then `log` cannot be called outside of this file