MST

星途 面试题库

面试题:TypeScript数组类型与元组类型结合在复杂场景下的实践

假设你正在开发一个图形渲染库,需要处理一系列图形操作。定义一个类型,它可以表示一组点,每个点是一个包含x和y坐标的元组。然后编写一个函数,接收这样的点数组,计算并返回这些点组成的图形的周长(假设相邻点之间是直线连接)。在实现过程中,要考虑TypeScript类型系统如何帮助你在编译时捕获潜在错误,并且在运行时高效处理数据。请说明你是如何设计类型和实现函数的,以及这样设计的优势。
34.3万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

类型定义

// 定义点的类型
type Point = [number, number];
// 定义点数组的类型
type PointArray = Point[];

函数实现

function calculatePerimeter(points: PointArray): number {
    let perimeter = 0;
    for (let i = 0; i < points.length; i++) {
        const currentPoint = points[i];
        const nextPoint = points[(i + 1) % points.length];
        const dx = nextPoint[0] - currentPoint[0];
        const dy = nextPoint[1] - currentPoint[1];
        perimeter += Math.sqrt(dx * dx + dy * dy);
    }
    return perimeter;
}

设计优势

  1. 类型安全:使用TypeScript的类型系统,在编译时就能捕获传入参数类型错误。例如,如果传入的不是 PointArray 类型的数据,编译器会报错,从而避免运行时错误。
  2. 代码可读性:明确的类型定义使代码更易读,其他开发者能清楚知道函数的参数和返回值的类型。
  3. 运行时效率:函数实现中,使用基本的算术运算和循环来计算周长,没有引入复杂的数据结构或操作,保证了运行时的高效性。在处理大量点时,这种简单直接的实现方式能有效减少计算资源的消耗。