I have a typescript class
export class Restaurant {
constructor ( private id: string, private name: string ) {
}
public getId() : string {
return th
If you're using TS 2.1, you can use object spread operator to create a shallow copy:
const obj = { a: 1 };
const clonedObj = { ...obj };
.clone() only clones DOM elements. In order to clone JavaScript objects try jQuery.extend. Something like this
// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);
Typescript transpiles to JavaScript. So, JavaScript way will work fine.
Demo:
// Transpiled version of TypeScript
"use strict";
var Restaurant = (function () {
function Restaurant(id, name) {
this.id = id;
this.name = name;
}
Restaurant.prototype.getId = function () {
return this.id;
};
Restaurant.prototype.setId = function (_id) {
this.id = _id;
};
Restaurant.prototype.getName = function () {
return this.name;
};
Restaurant.prototype.setName = function (_name) {
this.name = _name;
};
return Restaurant;
}());
// Test Snippet
var r1 = new Restaurant(1, "A");
var r2 = jQuery.extend(true, {}, r1);
r2.setName("B");
console.log(r1.name);
console.log(r2.name);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Using standard ES6 features
const clone = Object.assign({}, myObject)
Warning: this performs a shallow clone.
This excellent page from MDN contains tons of details on cloning, including a polyfill for ES5
A "quick" way of deep cloning is to use JSON
utilities
const clone = JSON.parse(JSON.stringify(myObject))
A "proper" way of cloning is to implement a clone method or a copy constructor...
I know, I know, not enough JQuery
This seems to work for me:
var newObject = Object.assign(Object.create(oldObj), oldObj)
Object.create creates a new instance with empty properties Object.assign then takes that new instance and assigns the properties
A more robust version of a clone function
clone(obj) {
if(Array.isArray(obj)) {
return Array.from(obj);
} else {
return Object.assign(Object.create(obj), obj);
}
}