MST
星途 面试题库

面试题:TypeScript 中数组与元组的基本操作及类型推断

请编写一个 TypeScript 函数,该函数接受一个数组,数组元素类型为 `string` 或 `number`,函数返回一个元组,元组的第一个元素是数组中所有 `string` 类型元素组成的新数组,第二个元素是数组中所有 `number` 类型元素的总和。请详细注释每一步操作的目的,并解释函数中的类型推断是如何工作的。
19.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义一个函数,接受一个包含string或number类型元素的数组
function separateAndSum(arr: (string | number)[]): [string[], number] {
    // 初始化一个空数组,用于存储string类型的元素
    let stringArray: string[] = [];
    // 初始化一个变量,用于存储number类型元素的总和,初始值为0
    let numberSum: number = 0;

    // 遍历传入的数组
    for (let i = 0; i < arr.length; i++) {
        // 使用typeof操作符检查当前元素的类型
        if (typeof arr[i] ==='string') {
            // 如果是string类型,将其添加到stringArray中
            stringArray.push(arr[i]);
        } else if (typeof arr[i] === 'number') {
            // 如果是number类型,将其加到numberSum中
            numberSum += arr[i];
        }
    }

    // 返回一个元组,第一个元素是stringArray,第二个元素是numberSum
    return [stringArray, numberSum];
}

类型推断解释

  1. 函数参数类型推断:函数定义时,参数arr的类型声明为(string | number)[],这表明该函数接受一个数组,数组中的元素类型可以是string或者number。TypeScript在编译时会检查传入的数组元素类型是否符合此定义。
  2. 变量类型推断
    • stringArray变量初始化为[],由于后面使用push方法添加string类型元素,TypeScript能够推断出stringArray的类型为string[]
    • numberSum变量初始化为0,TypeScript推断其类型为number,因为0number类型,且后续操作都是对数字的加法运算。
  3. 返回值类型推断:函数返回一个数组[stringArray, numberSum],TypeScript根据stringArray的类型string[]numberSum的类型number,推断出函数的返回值类型为[string[], number],这是一个包含string数组和number类型的元组。