只读 Getter 机制用于稳住配置访问入口,提供类型安全、不可篡改、语义清晰的只读视图;通过私有字段存储配置、getter 暴露冻结快照或业务语义属性,并结合状态守卫提升安全性。

只读 Getter 机制不是用来“拉配置”的,而是用来“稳住配置访问入口”的。它不替代配置加载逻辑,而是为已加载的配置提供一层类型安全、不可篡改、语义清晰的只读视图,防止误写、误读和状态漂移。
用私有字段存配置 + 只读 getter 暴露快照
把从远程或本地加载来的配置对象(如 config.json)存在私有字段里,比如 private _config: RuntimeConfig | null = null。对外不暴露这个字段,只提供一个非 async 的 getter:
- get config(): RuntimeConfig | undefined { return this._config; }
- 外部无法赋值,也无法通过 config.xxx = ... 修改原始数据
- TypeScript 能准确推导出返回类型是 RuntimeConfig | undefined,避免 any 或隐式 any
搭配 readonly 类型强化冻结语义
在 TypeScript 中,可进一步收窄权限:
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- 声明 readonly config: Readonly<RuntimeConfig> 字段(需构造时初始化),再配合 getter 封装
- 或直接让 getter 返回 Readonly<RuntimeConfig>,例如:
get config(): Readonly<RuntimeConfig> { return Object.freeze(this._config) as Readonly<RuntimeConfig>; } - 这样即使内部后续更新了 _config,外部拿到的对象本身是冻结的,无法意外修改
用 getter 抽象业务语义,屏蔽原始结构
避免直接暴露 raw config 对象,转而提供带业务含义的只读属性:
立即学习“前端免费学习笔记(深入)”;
- get apiBase(): string { return this._config?.api?.baseUrl ?? '/api'; }
- get isFeatureEnabled(): boolean { return this._config?.features?.analytics === true; }
- get theme(): 'light' | 'dark' | 'auto' { return this._config?.ui?.theme ?? 'light'; }
- 所有 getter 都不触发网络请求、不修改状态、不产生副作用,但统一了判断逻辑和默认行为
结合状态做类型守卫,提升调用安全性
配置中心不只是“有配置”,更是“配置是否就绪”。用 getter 封装状态判断能力:
- get isLoaded(): boolean { return !!this._config; }
- get hasError(): boolean { return this._error !== null; }
- get dataOrThrow(): RuntimeConfig { if (!this._config) throw new Error('Config not ready'); return this._config; }
- TypeScript 调用方可基于 isLoaded 做类型缩小,安全访问 config 属性

















