MST
星途 面试题库

面试题:TypeScript类型系统中的条件类型与类型推断

假设你有一个函数,接收一个参数,参数可以是字符串数组或者数字数组,根据传入的数组类型,函数返回不同类型的值(字符串数组返回字符串拼接结果,数字数组返回数字总和)。请使用TypeScript的条件类型和类型推断来实现这个函数,并说明实现思路。
40.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function processArray<T extends string[] | number[]>(arr: T): T extends string[]? string : number {
    if (Array.isArray(arr) && arr.length > 0) {
        if (typeof arr[0] ==='string') {
            return arr.join('') as T extends string[]? string : number;
        } else {
            return arr.reduce((acc, num) => acc + num, 0) as T extends string[]? string : number;
        }
    }
    return '' as T extends string[]? string : number;
}

实现思路

  1. 定义泛型:使用T作为泛型,并约束Tstring[]或者number[]类型,这样函数参数arr的类型就是T
  2. 条件类型:在函数返回值类型定义中使用条件类型T extends string[]? string : number,表示如果Tstring[]类型,返回值就是string类型,否则就是number类型。
  3. 类型判断:在函数内部,通过判断数组第一个元素的类型(typeof arr[0] ==='string'),来决定是进行字符串拼接(arr.join(''))还是数字求和(arr.reduce((acc, num) => acc + num, 0)),最后使用类型断言将结果转换为合适的类型返回。如果数组为空,对于字符串数组返回空字符串,数字数组返回0。