引言
TypeScript (以下简写为TS)是一门强类型的数据语言,能够进行静态类型的检查,这也是TS备受欢迎的一大原因;
假如我需要写一个函数,入参可以传入不同的类型,并且要求函数返回值也是传入参数的类型的话,应该怎么定义这个函数呢?
可能在没有接触泛型之前,你会不加思考的说出指定any 类型。当然就目前的问题是可以解决的,但是和TS 的类型保护的优势就相冲突了。
function hello(anyThing:any):any{
return anyThing;
}
当我们去调用这个函数获取结果赋给一个变量时,编译器对这个变量就无法进行代码提示了。
为了保持TS 的类型保护优势,同时解决上述问题,就可以采用 泛型来进行解决
官方的定义是:在定义函数、接口或者是类的时候,不预先指定具体的类型,而是在使用的时候再指定类型的一种特性。猛一看很抽象,但是我们只需要记住两个时间点:
上文提出的问题就可以使用泛型进行如下优化了:
function hello<T>(anyThing:T):T{
return anyThing;
}
这里多出了
hello<string>("我是字符串");//"我是字符串"
hello<number>(100);//100
hello<number|boolean>(true);//true
上述例子便是函数泛型的示例,还支持多个参数
function test<T,U>(arg1:T,arg2:U):Object{
return {arg1,arg2};
}
相信经过上述的例子大家对泛型的理解应该没问题了,当然可以自己尝试写一下 接口泛型 和 类泛型 啦。