MST

星途 面试题库

面试题:TypeScript中泛型声明位置的基础应用

请举例说明在函数参数和函数返回值位置声明泛型有什么不同,并编写代码示例展示这两种声明位置的使用场景。
24.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 函数参数位置声明泛型
    • 不同点:在函数参数位置声明泛型,主要是为了让函数接受不同类型的参数,但保持这些参数在函数内部的类型一致性。它更侧重于对输入数据类型的灵活处理,确保函数可以复用逻辑处理不同类型的数据输入。
    • 代码示例(以TypeScript为例)
function printValue<T>(value: T) {
    console.log(value);
}
printValue<string>("Hello");
printValue<number>(123);

在上述代码中,printValue函数在参数位置声明了泛型T,这样它可以接受任何类型的参数,并打印出来。这里T代表了传入参数的类型,通过类型标注<T>来指定实际传入参数的类型。

  1. 函数返回值位置声明泛型
    • 不同点:在函数返回值位置声明泛型,强调的是函数返回值的类型与函数内部某些操作相关,且这个返回值类型是动态可变的,取决于函数内部逻辑或者传入的其他参数等。它侧重于控制函数返回结果的类型灵活性。
    • 代码示例(以TypeScript为例)
function createArray<T>(length: number, value: T): T[] {
    let result: T[] = [];
    for (let i = 0; i < length; i++) {
        result.push(value);
    }
    return result;
}
let arr1 = createArray<string>(3, "a");
let arr2 = createArray<number>(2, 10);

在上述代码中,createArray函数在返回值位置声明了泛型T,函数根据传入的lengthvalue创建一个包含lengthvalue的数组并返回。这里返回值类型T[]取决于传入的value的类型,通过泛型T来动态确定返回数组元素的类型。