node.js - 打字稿如何使公共静态成员变量可读
问题描述
我正在使用 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”成员只可读。有可能这样做吗?
解决方案
如果您想要在整个应用程序中保持 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
推荐阅读
- ios - SWIFT:在 UITableView 中设置其属性之前初始化 UITableViewCell
- shopify - 您的订单创建 webhook 未能返回成功的响应 C#
- python - API请求循环通过python中的分页
- android - 如何在 Kotlin Android 中从我的应用和 FireStore 中删除 recyclerView 列表?
- javascript - 烹饪单位度量转换库
- javascript - 为 Formik 字段设置自动完成功能
- python - 从 views.py 在 url 中传递变量
- java - 在 Java 代码中使用具有隐式参数的 Scala 对象中的函数
- c++ - 我需要将对象向量或大括号括起来的列表传递给构造函数的选项
- node.js - 收到错误 Oauth 错误 invalid_request:redirect_uri 未通过本地主机从 Shopify API 访问中列入白名单?