跳到主要内容

deepFreeze()

function deepFreeze<T>(target): Readonly<T>;

Defined in: packages/utils/src/object/deepFreeze.ts:62

深度冻结对象及其所有嵌套属性,使其不可修改 递归遍历对象的所有属性,对每个对象和函数属性调用 Object.freeze()

Type Parameters​

Type ParameterDescription
T extends object对象类型

Parameters​

ParameterTypeDescription
targetT要深度冻结的对象

Returns​

Readonly<T>

传入的对象本身,类型收窄为 Readonly<T>

Examples​

const obj = { a: { b: 1 } };
const frozen = deepFreeze(obj);
frozen.a.b = 2; // 抛出错误,对象已被冻结
const arr = [1, { nested: 2 }];
const frozenArr = deepFreeze(arr);
frozenArr[1].nested = 3; // 抛出错误,嵌套对象也被冻结
**注意:** 原始类型(string、number、boolean等)和 null 值不会被冻结
**注意:** 函数对象也会被冻结,防止修改其属性
**注意:** 始终返回传入的对象本身(已冻结的对象不会重复冻结)
**注意:** 循环引用与菱形引用都会收敛,不会栈溢出
**注意:** 字符串键与 symbol 键都会遍历(`Reflect.ownKeys`)
**注意:** `Map` / `Set` 中引用到的键、值、元素都会被冻结,但**容器的内部槽冻结不了**
—— 冻结后 `map.set()` / `map.delete()` / `set.add()` 仍然生效。返回类型因此只承诺
`Readonly<T>`:`ReadonlyDeep<T>` 会在类型层面谎报 Map/Set 内容不可变(UTL-004)。