MST
星途 面试题库

面试题:深入理解TypeScript剩余参数在类型推断与泛型中的应用

在TypeScript中,如何利用剩余参数结合泛型来实现一个通用的函数,该函数能够接受任意数量和类型的参数,并根据传入参数的类型进行精准的类型推断,返回一个包含特定信息的对象。要求详细说明类型推断的过程以及泛型的具体应用方式。
39.3万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 利用剩余参数结合泛型实现通用函数
function createInfoObject<T extends any[]>(...args: T): {
    parameterCount: number;
    parameterTypes: (string | undefined)[];
    data: T;
} {
    // 获取参数类型
    const parameterTypes = args.map(arg => typeof arg);

    return {
        parameterCount: args.length,
        parameterTypes,
        data: args
    };
}

// 类型推断过程:
// 1. 定义泛型T,它被约束为any[]类型的数组,用来表示传入参数的类型。
// 2. 使用剩余参数...args: T来接收任意数量和类型的参数,这样T就会根据传入的实际参数类型进行推断。
// 3. 在函数内部,通过map方法遍历args数组,使用typeof获取每个参数的类型,并存储在parameterTypes数组中。
// 4. 最后返回一个对象,对象中包含参数数量、参数类型数组以及原始数据数组,精准地体现了传入参数的类型信息。

// 示例调用
const result = createInfoObject(1, 'hello', true);
console.log(result.parameterCount); // 3
console.log(result.parameterTypes); // ['number', 'string', 'boolean']
console.log(result.data); // [1, 'hello', true]
  1. 泛型应用
    • 定义了泛型 T,并约束为 any[] 类型,这样 T 就会根据传入的实际参数数组类型进行推断。
    • 在函数返回类型中使用 T,确保返回的 data 属性与传入的参数类型保持一致。
  2. 类型推断
    • 当调用 createInfoObject 函数并传入参数时,TypeScript 会根据传入参数的类型推断出 T 的具体类型。
    • 例如,传入 (1, 'hello', true)T 会被推断为 [number, string, boolean],这样整个函数的返回类型也会根据这个推断结果进行确定,保证了类型的精准性。