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;