/** * @param modifier 传入一个函数,函数的参数是一个 draft 对象,可以直接修改 draft 对象 * @returns 返回一个经过 modifier 修改的新的对象(frozen),原对象不变;如果没有传入 modifier,则返回原对象 * @example * const obj = { a: { b: 0 } }; * const newObj = safeDeepModify(obj, (draftObj) => { draftObj.a.b = 1; }); * assert(obj.a.b === 0); * assert(newObj.a.b === 1); */ export default function safeDeepModify>(obj: T, modifier?: (draft: T) => void): Readonly;