1.Utilice el operador de propagación
const obj1 = { param: "value" };
const obj2 = { ...obj1 };
El operador de propagación toma todos los campos de obj1 y los extiende sobre obj2. En el resultado, obtienes un nuevo objeto con una nueva referencia y los mismos campos que el original.
Recuerde que es una copia superficial, significa que si el objeto está anidado, sus parámetros compuestos anidados existirán en el nuevo objeto con la misma referencia.
2.Object.assign ()
const obj1={ param: "value" };
const obj2:any = Object.assign({}, obj1);
Object.assign crea una copia real, pero solo propiedades propias, por lo que las propiedades en el prototipo no existirán en el objeto copiado. También es una copia superficial.
3.Object.create ()
const obj1={ param: "value" };
const obj2:any = Object.create(obj1);
Object.create no está haciendo una clonación real , está creando un objeto a partir del prototipo. Así que úselo si el objeto debe clonar propiedades de tipo primario, porque la asignación de propiedades de tipo primario no se realiza por referencia.
Las ventajas de Object.create son que cualquier función declarada en prototipo estará disponible en nuestro objeto recién creado.
Pocas cosas sobre copia superficial
La copia superficial coloca en un objeto nuevo todos los campos del anterior, pero también significa que si el objeto original tiene campos de tipo compuesto (objeto, matrices, etc.), esos campos se colocan en un objeto nuevo con las mismas referencias. La mutación de dicho campo en el objeto original se reflejará en un objeto nuevo.
Puede parecer una trampa, pero la situación en la que todo el objeto complejo necesita ser copiado es rara. La copia superficial reutilizará la mayor parte de la memoria, lo que significa que es muy barata en comparación con la copia profunda.
Copia profunda
El operador de propagación puede ser útil para la copia profunda.
const obj1 = { param: "value", complex: { name: "John"}}
const obj2 = { ...obj1, complex: {...obj1.complex}};
El código anterior creó una copia profunda de obj1. El campo compuesto "complejo" también se copió en obj2. El campo de mutación "complejo" no reflejará la copia.