推荐答案
泛型函数(Generic Functions)是 TypeScript 中一种允许函数在调用时接受任意类型参数的机制。通过使用泛型,可以编写更通用、灵活的函数,而不必为每种可能的类型编写单独的函数。
定义
泛型函数通过在函数名后使用尖括号 <T>
来定义,其中 T
是一个类型变量,表示函数可以接受任意类型。例如:
function identity<T>(arg: T): T { return arg; }
在这个例子中,identity
函数接受一个类型为 T
的参数 arg
,并返回相同类型的值。
用法
泛型函数可以在调用时指定具体的类型,也可以让 TypeScript 自动推断类型。例如:
let output1 = identity<string>("Hello"); // 显式指定类型为 string let output2 = identity(42); // 自动推断类型为 number
本题详细解读
泛型函数的作用
泛型函数的主要作用是提高代码的复用性和类型安全性。通过使用泛型,可以避免为每种类型编写重复的函数,同时确保在编译时进行类型检查。
类型推断
TypeScript 的类型推断机制使得在调用泛型函数时,通常不需要显式指定类型参数。编译器会根据传入的参数自动推断出合适的类型。
多个类型参数
泛型函数可以定义多个类型参数,例如:
function merge<U, V>(obj1: U, obj2: V): U & V { return { ...obj1, ...obj2 }; }
在这个例子中,merge
函数接受两个不同类型的参数 obj1
和 obj2
,并返回它们的合并结果。
约束类型参数
有时需要对泛型类型参数进行约束,以确保它们满足某些条件。可以通过 extends
关键字来实现:
function getProperty<T, K extends keyof T>(obj: T, key: K) { return obj[key]; }
在这个例子中,K
被约束为 T
的键之一,确保 key
是 obj
的有效属性。
默认类型参数
TypeScript 还支持为泛型类型参数提供默认值:
function createArray<T = string>(length: number, value: T): T[] { return Array(length).fill(value); }
在这个例子中,如果调用 createArray
时没有指定类型参数,T
将默认为 string
类型。