Readonly

Readonly

enum LogLevel {
  Off,
  Debug,
  Error,
  Fatal,
}

interface LoggerConfig {
  name: string;
  level: LogLevel;
}

class Logger {
  config: Readonly<LoggerConfig>;

  constructor({ name, level }: LoggerConfig) {
    this.config = { name, level };
    Object.freeze(this.config);
  }
}

const config: LoggerConfig = {
  name: "MyApp",
  level: LogLevel.Debug,
};

const logger = new Logger(config);

// TypeScript Error: cannot assign to read-only property.
logger.config.level = LogLevel.Error;

// We are able to edit config variable as we please.
config.level = LogLevel.Error;
上一页
下一页