export function deepFreezeClone (obj:T):Readonly { return deepFreeze(JSON.parse(JSON.stringify(obj))); } function deepFreeze (obj:T):T{ Object.freeze(obj); if (obj === undefined) { return obj; } const propertyNames = Object.getOwnPropertyNames(obj) as Array; propertyNames.forEach(function (prop) { if (obj[prop] !== null&& (typeof obj[prop] === "object" || typeof obj[prop] === "function") && !Object.isFrozen(obj[prop])) { deepFreezeClone(obj[prop]); } }); return obj; }