import CloneFactoryInterface from './CloneFactoryInterface'; export default class CloneFactory implements CloneFactoryInterface { clone(item: any): any { if (item === null || item === undefined) { return item; } let cloned; if (typeof item === 'string') { cloned = item; } else { cloned = Object.assign(Object.create(Object.getPrototypeOf(item)), item); Object.keys(item).map(each => { let method = each.slice(0, 0) + each.slice(1); let value = item[method]; if (Array.isArray(value)) { let clone_array = value.map(e => this.clone(e)); cloned[method] = clone_array; } else if (typeof value === 'object') { cloned[method] = this.clone(value); } }); } return cloned; } }