readonly 修饰类属性、接口属性或数组,修饰后赋值会在编译期报错。常见于不可变数据流:store 的状态、配置对象标记为只读后,任何误改都能立即发现。数组有只读变体 ReadonlyArray
readonly 只在编译期有效,运行时不阻止 Object.assign 等动态修改,用 Object.freeze 才能得到运行时只读。对象层级深时 readonly 只保护第一层,深层属性需要递归类型 Readonly
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); // 只读方法正常可用