Solución
solution.tsTypeScript
export function deepFreeze(obj: Record<string, unknown>): boolean {
// Congela el objeto raíz con Object.freeze()
// Recorre recursivamente cada propiedad que sea un objeto y congélala también
// Retorna true si todos los niveles quedaron congelados
const keys: string[] = Object.keys(obj)
// Congela las props. del obj. que sean objetos a su vez, o funciones
for(let key of keys) {
// Si la llave no es nula, es un objecto (o arreglo) o una función, entonces los pasamos como argumento
if( ( key && typeof key === 'object') || typeof key === 'function' ) {
deepFreeze(key);
}
continue;
}
// Congela el obj en general
Object.freeze(obj);
// Comprueba si el 'obj' está congelado y si todas las llaves también
return Object.isFrozen(obj) && keys.every( key => Object.isFrozen(key));
}
// ¡¡OJO!! Con las referencias circulares y la congelaciones no deseadas, como el objeto "window".Las funciones creadas con la sintaxis `function` tienen una propiedad `prototype` con una propiedad `constructor` que apunta a la propia función, por ejemplo.
0respuestas