面试题答案
一键面试代码实现
function combineNumbers<T extends number[]>(nums: T): number {
let sumOfSquares = 0;
for (let num of nums) {
sumOfSquares += num * num;
}
return Math.sqrt(sumOfSquares);
}
实现原理
- 泛型约束:通过
T extends number[]
来约束泛型T
必须是number
类型元素组成的数组(在TypeScript里,元组本质也是特殊的数组)。这样就确保了传入函数的参数nums
中的元素都是number
类型。 - 元组类型:因为函数接受的参数类型被约束为
number
类型元素组成的数组,所以可以对其中的元素进行数字相关的操作。这里对每个元素求平方并累加,最后对累加和求平方根。
实际项目中的优势
- 类型安全:通过泛型约束,在编译阶段就能确保传入的参数类型符合要求,减少运行时类型错误的可能性,提高代码的稳定性和可维护性。
- 复用性:该函数可以适用于任何长度的
number
类型元组,不需要为不同长度的元组重复编写相似的处理逻辑,提高了代码的复用性。
可能遇到的问题
- 性能问题:当元组中的元素数量非常大时,计算平方和以及开方的操作可能会比较耗时,影响程序的性能。可以考虑优化算法或采用并行计算等方式来提升性能。
- 类型兼容性:虽然泛型约束了参数类型为
number
类型的元组,但在与其他库或代码集成时,可能会因为类型系统的细微差异而导致兼容性问题,需要仔细处理类型转换。