MST

星途 面试题库

面试题:TypeScript 联合类型类型保护在复杂场景下的应用及优化

现有一个复杂的联合类型 `type ComplexUnion = { type: 'user'; name: string; age: number } | { type: 'product'; name: string; price: number } | { type: 'order'; orderId: number; items: { name: string; quantity: number }[] }`。编写一个函数,该函数接收 `ComplexUnion` 类型的参数,根据不同的 `type` 执行不同的逻辑:对于 `'user'` 类型,返回用户信息字符串;对于 `'product'` 类型,返回产品信息字符串;对于 `'order'` 类型,计算并返回订单总金额。要求代码不仅要正确实现功能,还要考虑性能优化,例如避免不必要的类型判断,并解释你的优化思路和这样做的原因。
26.3万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function handleComplexUnion(data: ComplexUnion): string | number {
    switch (data.type) {
        case 'user':
            return `User: ${data.name}, Age: ${data.age}`;
        case 'product':
            return `Product: ${data.name}, Price: ${data.price}`;
        case 'order':
            return data.items.reduce((total, item) => total + item.quantity * 1, 0);
    }
}

优化思路及原因

  1. 使用 switch 语句:相比多个 if - else 语句,switch 语句在处理离散值(如这里的 type 字段)时通常具有更好的性能。在 if - else 链中,JavaScript 引擎需要依次检查每个条件,而 switch 语句在大多数情况下能够直接跳转到匹配的分支,减少不必要的比较操作。
  2. 直接通过 type 判断:由于 ComplexUnion 联合类型已经明确了不同类型的 type 字段,直接根据 type 进行判断是最直接有效的方式,避免了复杂的类型断言或其他间接判断方式,减少了额外的计算开销。这样既保证了代码的简洁性,又提高了执行效率。