看下面这个TypeScript函数:
function identity(arg: any): any {
return arg;
}
虽然使用any类型后这个函数已经能接收任何类型的arg参数,但是却丢失了一些信息:传入的类型与返回的类型应该是相同的。 通过any类型,无法实现这个约束。
因此,需要一种方法使返回值的类型与传入参数的类型是相同的。 这里,我们使用了类型变量,它是一种特殊的变量,只用于表示类型而不是值。
function identity<T>(arg: T): T {
return arg;
}
现在,identity接受的参数类型和返回类型必须一致。
两种方式调用该函数:
(1) let output = identity(“myString”); // type of output will be ‘string’
明确的指定了T是string类型,并做为一个参数传给函数,使用了<>括起来而不是()。
(2) 类型推论,编译器会根据传入的参数自动地帮助我们确定T的类型:
let output = identity(“myString”); // type of output will be ‘string’