泛型
不仅创建一个良好的API,同时也要考虑可复用性。组件不仅能支持当前的数据类型,同时也能支持未来的数据类型。
不用泛型,函数表示
function identity (arg : number) :number {
return arg
}
上面的不能特制到函数的类型
用到泛型,函数表示
function identity<T>(arg:T) :T {
return arg
}
T帮助我们捕获用户传入的参数类型,之后我们就可以使用这个类型。然后我们再次使用T当做返回数值类型。这允许我们跟踪函数里使用的类型信息。
定义泛型函数后,可以用两种方法使用。
第一种,传入所有的参数,包含类型参数:
let output = identity<string>('myString')
// 这里我们明确的指定了T 是string类型,并做为一个参数传给函数,使用<> 括起来而不是()
第二种(比较普遍),利用类型推论—即编译器会根据传入的参数自动地帮助我们确定T的类型:
let output = identity("myString")
// 没必要使用尖括号来明确类型。编译器可以查看myString的值,然后把T设置为他的类型。
// 如果编译器不能自动推断出类型的话,只能明确的传入T的类型,在一些复杂的情况下,只是可能出现的。