MST

星途 面试题库

面试题:TypeScript函数重载与泛型结合的复杂场景

实现一个函数`processData`,它可以接收不同类型的数组进行处理。当数组元素是数字类型时,计算数组元素的总和;当数组元素是字符串类型时,返回数组中最长字符串的长度;当数组元素是自定义类型`{name: string; age: number}`时,返回年龄最大的人的名字。要求使用TypeScript的函数重载结合泛型来实现,并确保类型安全和正确的类型推断。
15.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
interface Person {
    name: string;
    age: number;
}

function processData(arr: number[]): number;
function processData(arr: string[]): number;
function processData(arr: Person[]): string;
function processData<T>(arr: T[]): number | string {
    if (Array.isArray(arr) && arr.length > 0) {
        if (typeof arr[0] === 'number') {
            return arr.reduce((sum, num) => sum + num, 0);
        } else if (typeof arr[0] ==='string') {
            return arr.reduce((maxLength, str) => Math.max(maxLength, str.length), 0);
        } else if ('name' in arr[0] && 'age' in arr[0]) {
            return (arr as Person[]).reduce((oldest, person) => person.age > oldest.age? person : oldest).name;
        }
    }
    return 0;
}