TypeScript 词条目录
前端Wiki/词条/readonly 只读

readonly 只读

定义把属性或数组标记为只读,赋值时编译报错

readonly 修饰类属性、接口属性或数组,修饰后赋值会在编译期报错。常见于不可变数据流:store 的状态、配置对象标记为只读后,任何误改都能立即发现。数组有只读变体 ReadonlyArray,它的 push、pop 等修改方法全部被禁止,是纯函数风格编程的基础约束。

readonly 只在编译期有效,运行时不阻止 Object.assign 等动态修改,用 Object.freeze 才能得到运行时只读。对象层级深时 readonly 只保护第一层,深层属性需要递归类型 Readonly。把 readonly 与可变协变问题结合理解,是掌握 TS 类型系统的关键一步。

JavaScript
interface Config {
  readonly host: string;
  readonly port: number;
}

const cfg: Config = { host: 'localhost', port: 80 };
// cfg.host = 'x';      // 报错:只读属性不可赋值

const list: ReadonlyArray<number> = [1, 2, 3];
// list.push(4);        // 报错:只读数组没有修改方法
list.map(n => n * 2);   // 只读方法正常可用
⚠ 常见误区
🔗 相关词条Record Readonly 与 ReturnType数组与元组
← 返回来源章节Record Readonly 与 ReturnType