代码实现
function mergeObjects<T extends object, U extends object>(obj1: T, obj2: U): T & U {
return {...obj1, ...obj2 };
}
优化思路
- 类型推断:通过泛型
T
和 U
,TypeScript 可以根据传入的实际对象类型进行自动类型推断。这样无需手动指定返回类型,减少了冗余代码。例如,当调用 mergeObjects({a: 1}, {b: '2'})
时,TypeScript 能推断出 T
为 {a: number}
,U
为 {b: string}
,进而推断出返回类型为 {a: number} & {b: string}
,即 {a: number, b: string}
。
- 泛型约束:使用
T extends object
和 U extends object
约束了泛型 T
和 U
必须是对象类型。这保证了传入的参数是对象,避免了传入非对象类型(如 null
、undefined
等)导致的运行时错误。同时,在对象展开操作 {...obj1, ...obj2 }
中,由于约束了参数为对象,所以这种操作是类型安全的,无需进行额外的类型转换检查,从而优化了性能。