MST

星途 面试题库

面试题:TypeScript 数组与元组在复杂类型场景下的应用

假设你有一个描述用户信息的数组,数组中的每个元素是一个元组,元组格式为 `[name: string, age: number, hobbies: string[]]`。现在需要实现一个函数,该函数接收这样一个用户信息数组,并返回一个新数组,新数组中的元素也是元组,格式为 `[name: string, totalHobbies: number]`,即新元组中第二个元素是原元组中爱好数组的长度。要求在函数中使用 `map`、`reduce` 等数组方法,同时要确保类型安全,并解释你是如何利用类型系统来避免潜在错误的。
43.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function transformUserInfo(users: [string, number, string[]][]): [string, number][] {
    return users.map(user => {
        const [name, , hobbies] = user;
        return [name, hobbies.length];
    });
}

类型安全说明

  1. 函数参数类型定义:在函数 transformUserInfo 的参数中,明确指定其类型为 [string, number, string[]][],这表明传入的数组中的每个元素都是一个包含字符串、数字和字符串数组的元组。这确保了传入的数据结构与预期一致,避免传入类型不匹配的数据。
  2. 函数返回值类型定义:函数返回值类型定义为 [string, number][],说明返回的数组中的每个元素是包含字符串和数字的元组。这使得调用该函数的代码能够预期正确的返回值结构,避免在后续使用返回值时出现类型错误。
  3. 解构赋值时的类型推断:在 map 回调函数中,使用解构赋值 const [name, , hobbies] = user;,TypeScript 能够根据 users 的类型定义推断出 name 是字符串类型,hobbies 是字符串数组类型,从而在计算 hobbies.length 时保证类型安全。如果 hobbies 不是数组类型,TypeScript 会在编译阶段报错,避免运行时错误。