首页 > 解决方案 > 打字稿如何使公共静态成员变量可读

问题描述

我正在使用 typescript 编写节点应用程序并使用 winston 进行日志记录。

我创建了一个带有“logger”成员和“init()”成员函数的“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”成员只可读。有可能这样做吗?

标签: node.jstypescriptloggingwinston

解决方案


如果您想要在整个应用程序中保持 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

推荐阅读