面试题答案
一键面试// 定义泛型函数
function combineData<T, U>(arg1: T, arg2: U): T & U {
// 这里简单使用类型断言,因为TS在运行时无法区分联合类型中的具体类型
return Object.assign({}, arg1, arg2) as T & U;
}
// 示例使用
let result1 = combineData({ name: 'John' }, { age: 30 });
console.log(result1);
解释:
- 定义了泛型函数
combineData
,它接受两个泛型参数T
和U
。 - 使用
Object.assign
方法将两个对象合并,并通过类型断言返回T & U
类型的结果。 - 示例中展示了如何调用该函数,将一个包含
name
属性的对象和一个包含age
属性的对象合并成一个新对象。
如果需要根据不同联合类型做更具体处理,示例如下:
// 定义泛型函数
function combineData<T, U>(arg1: T, arg2: U): T & U {
if (typeof arg1 ==='string' && typeof arg2 === 'number') {
// 这里是对string和number类型的特定处理
return (`${arg1} - ${arg2}` as unknown) as T & U;
}
if (typeof arg1 === 'number' && typeof arg2 ==='string') {
// 这里是对number和string类型的特定处理
return (`${arg2} - ${arg1}` as unknown) as T & U;
}
// 其他情况简单合并
return Object.assign({}, arg1, arg2) as T & U;
}
// 示例使用
let result1 = combineData('test', 123);
console.log(result1);
let result2 = combineData({ name: 'John' }, { age: 30 });
console.log(result2);
解释:
- 在函数内部,增加了对
arg1
为string
且arg2
为number
以及arg1
为number
且arg2
为string
这两种情况的特定处理。 - 对于其他类型组合,依然使用
Object.assign
进行简单合并。 - 示例展示了不同类型组合的调用及处理结果。