TS入门-泛型

127 阅读1分钟

以前在看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;
}

用来捕获用户传入的类型并将它传给静态语言系统。

定义了泛型之后,可以有两种方法使用。

  1. 传入所有的参数,包括类型参数。

    let output = identity<string>("mystring"); //返回值会是string类型
    
  2. 使用类型推论——让编译器自己判断。需要注意的是编译器如果不能自己推断,是需要使用第一种方法的。

    let output = identity("mystring"); //返回值会是string类型
    

结语

泛型在TS中用的很广泛,学会理解和使用它能够大大加强ts的类型推断,让开发体验如丝般顺滑。