以前在看vue源码的时候,看到使用了大量的,不太明白这样写的作用,因此专门写一篇来总结。
总的来说,泛型就是any的另外一种写法,那么既然如此,为什么不写any呢。
来看看下面的一个例子:
function identity(arg: number): number {
return arg;
}
//或者
function identity(arg: any): any {
return arg;
}
返回的函数是any类型,那么就丢失掉了一些信息:即传入和传出应该是同一种类型。
这个时候就需要用到泛型;
function identity<T>(arg: T): T {
return arg;
}
用来捕获用户传入的类型并将它传给静态语言系统。
定义了泛型之后,可以有两种方法使用。
-
传入所有的参数,包括类型参数。
let output = identity<string>("mystring"); //返回值会是string类型 -
使用类型推论——让编译器自己判断。需要注意的是编译器如果不能自己推断,是需要使用第一种方法的。
let output = identity("mystring"); //返回值会是string类型
结语
泛型在TS中用的很广泛,学会理解和使用它能够大大加强ts的类型推断,让开发体验如丝般顺滑。