MST

星途 面试题库

面试题:TypeScript泛型在搜索算法优化中的体现

假设你要实现一个二分搜索算法,使用TypeScript泛型来确保该算法能适用于不同类型且有序的数组。同时,说明在处理大型数据集时,泛型类型约束和类型推断如何提升算法的性能和可靠性。
25.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function binarySearch<T extends number | string>(arr: T[], target: T): number {
    let left = 0;
    let right = arr.length - 1;

    while (left <= right) {
        const mid = Math.floor((left + right) / 2);

        if (arr[mid] === target) {
            return mid;
        } else if ((arr[mid] < target) as boolean) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }

    return -1;
}

泛型类型约束和类型推断对性能和可靠性的提升

  1. 性能
    • 类型约束:通过T extends number | string这样的类型约束,TypeScript编译器能够在编译时确定类型。在运行时,JavaScript引擎可以利用这种类型信息进行优化。例如,对于number类型,引擎可以使用更高效的数字比较算法,而不是通用的对象比较,因为number的比较是基本操作,速度更快。
    • 类型推断:类型推断使得代码在编写时更加简洁,减少了显式类型声明的冗余。这不仅提高了开发效率,而且在编译时,TypeScript编译器能够根据上下文准确推断类型。例如,当调用binarySearch([1, 2, 3], 2)时,编译器能推断出Tnumber,从而在生成的JavaScript代码中进行合适的优化。
  2. 可靠性
    • 类型约束:限制泛型Tnumberstring,确保了只有满足条件的类型才能作为参数传入。如果尝试传入其他类型,如自定义对象类型,编译器会报错,从而在开发阶段就发现潜在的类型错误,提高了代码的可靠性。
    • 类型推断:在调用函数时,TypeScript编译器根据传入的参数推断出泛型类型。这有助于确保传递给函数的参数类型正确,例如,如果binarySearch函数期望的是number数组,而传入了字符串数组,编译器会报错,避免运行时出现类型不匹配的错误,提升了程序的可靠性。