typescript 深拷贝代码
时间: 2024-04-14 20:23:18 浏览: 165
在 TypeScript 中实现深拷贝的代码可以使用递归和类型断言来实现。下面是一个示例代码:
```typescript
function deepClone<T>(obj: T): T {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(item => deepClone(item)) as unknown as T;
}
const clonedObj = {} as T;
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clonedObj[key] = deepClone(obj[key]);
}
}
return clonedObj;
}
```
这段代码中,我们定义了一个 `deepClone` 函数,它接受一个泛型参数 `T`,表示要拷贝的对象的类型。首先,我们判断传入的对象是否为基本类型或者 `null`,如果是,则直接返回该对象。
然后,我们判断传入的对象是否为数组,如果是,则使用 `map` 方法递归地对数组中的每个元素进行深拷贝,并使用类型断言将结果转换为泛型参数 `T`。
最后,如果传入的对象是普通对象,则创建一个空对象 `clonedObj`,遍历原对象的属性,并递归地对每个属性进行深拷贝,然后将拷贝后的属性赋值给 `clonedObj`。
使用示例:
```typescript
const obj = { name: 'Alice', age: 20, hobbies: ['reading', 'coding'] };
const clonedObj = deepClone(obj);
console.log(clonedObj); // { name: 'Alice', age: 20, hobbies: ['reading', 'coding'] }
console.log(clonedObj === obj); // false
```
阅读全文