面试题答案
一键面试优化思路
- 使用联合类型与类型守卫:通过联合类型将所有可能的数据类型合并,然后在函数内部使用类型守卫来区分不同类型的数据并进行相应处理。这样可以减少函数重载的数量,使代码结构更清晰。
- 泛型:如果处理逻辑在一定程度上是通用的,可以使用泛型来提高代码的复用性,减少重复代码。
示例代码
假设 processData
原本有针对 string
和 number
类型的重载:
// 原始重载形式
function processData(data: string): string;
function processData(data: number): number;
function processData(data: string | number) {
if (typeof data ==='string') {
// 处理string类型数据
return data.toUpperCase();
} else {
// 处理number类型数据
return data * 2;
}
}
// 使用泛型的情况(假设处理逻辑类似)
function processData<T extends string | number>(data: T): T extends string? string : number {
if (typeof data ==='string') {
return data.toUpperCase() as T extends string? string : number;
} else {
return (data * 2) as T extends string? string : number;
}
}
通过上述方式,在保证原有功能不受影响的情况下,利用TypeScript类型系统特性优化了 processData
函数的重载设计,使其更易于维护和扩展。