用途:在 TypeScript 中通过 readonly 表达“数据不应被修改”的意图,让编译器在编译期捕获意外的变更操作,减少因修改共享数据而产生的 bug。
主要能力:对数组参数使用 readonly number[] 等写法,禁止 push、索引赋值等修改操作;对对象参数使用 Readonly<T> 使属性只读;对接口属性加 readonly 关键字;用 as const 获得深层只读。核心原则是除非修改是函数的明确目的,否则绝不修改函数参数。若确需修改,应先复制,例如 [...arr].sort(...) 或使用不修改原数组的 toSorted()。
使用方式:在函数签名中把可变参数改为只读类型,在不应变化的属性前加 readonly。遇到函数对参数调用 push、sort、splice,或出现“不要修改此数组”之类注释时,应视为需要重构的信号。
适用场景:向函数传递数组或对象、调试数据被意外改动、设计函数签名、处理共享状态、编写不应修改输入的 API。
限制:readonly 只是编译期检查,不是运行时保证,通过类型断言仍可在运行时修改;readonly 是浅层的,嵌套对象不会被自动只读,需要深层只读时可使用 DeepReadonly 或 as const;真正的运行时不可变需借助 Object.freeze()。资料未提供安装命令、价格或平台信息。