写一个typescript的深合并
时间: 2023-11-27 21:53:07 浏览: 35
下面是一个 TypeScript 的深合并函数实现:
```typescript
type Merge<A, B> = { [K in keyof A | keyof B]: K extends keyof A ? K extends keyof B ? Merge<A[K], B[K]> : A[K] : K extends keyof B ? B[K] : never };
function deepMerge<A, B>(a: A, b: B): Merge<A, B> {
const result = {} as Merge<A, B>;
for (const key in a) {
if (Object.prototype.hasOwnProperty.call(a, key)) {
const aValue = a[key];
const bValue = b[key];
if (typeof aValue === 'object' && typeof bValue === 'object') {
result[key] = deepMerge(aValue, bValue);
} else if (bValue === undefined) {
result[key] = aValue;
} else {
result[key] = bValue;
}
}
}
for (const key in b) {
if (Object.prototype.hasOwnProperty.call(b, key)) {
const aValue = a[key];
const bValue = b[key];
if (typeof aValue !== 'object' && typeof bValue === 'object') {
result[key] = deepMerge(aValue, bValue);
} else if (aValue === undefined) {
result[key] = bValue;
}
}
}
return result;
}
```
该函数接受两个参数,要被合并的两个对象,返回一个新的合并后的对象。其中 `Merge` 类型使用了 TypeScript 的映射类型,用于定义两个对象合并后的类型。在函数内部使用递归实现深度合并,并将结果存储在 `result` 对象中。