type MergeInterfaces<T, U> = {
[K in keyof T | keyof U]: K extends keyof T
? K extends keyof U
? T[K] extends U[K]
? T[K]
: U[K] extends T[K]
? U[K]
: never // 类型冲突,抛出类型错误
: T[K]
: K extends keyof U
? U[K]
: never;
};
function mergeInterfaces<T, U>(obj1: T, obj2: U): MergeInterfaces<T, U> {
const result = {} as MergeInterfaces<T, U>;
for (const key in obj1) {
result[key as keyof MergeInterfaces<T, U>] = obj1[key as keyof T];
}
for (const key in obj2) {
if (!Object.prototype.hasOwnProperty.call(obj1, key)) {
result[key as keyof MergeInterfaces<T, U>] = obj2[key as keyof U];
}
}
return result;
}