当然,泛型可以写不止一个,再看一个例子,泛型可以写不止一个,多个也是可以的
function join<T,A>(first: T, second: A) {
return ${first}-${second}
;
}
join<string,number>(“1”,123) // 正确
// 甚至,TS是能根据定义的时候做类型推断的
join(“1”,123) // 正确,这么写也没有问题,TS能自己推断出具体类型是什么
可能有的同学看到这里会说,这个泛型确实比一般的类型复杂了点,但是也没上面说的复杂到看不懂啊,好吧,到这里其实只是一些基础知识,来着稍微复杂一点的试炼一下
const getData: (str: T) => string = (str: T): string => {
return ${str}-1
;
};
emmm…,第一反应肯定是有点懵,这是个啥,有点像箭头函数,但是为什么会有两个箭头函数在一起,好吧,我们具体解释一下:
首先我们确定这是一个函数表达式,然后后面应该是跟了一个箭头函数,然后返回的就是这个${str}-1
,当中一部分应该是TS的类型定义,那我换个写法,看看能不能理解:
// 将箭头函数拆解出来
function handleData(str: T): string {
return ${str}-1
;
}
const getData: (str: T) => string = handleData;
这样是不是好理解一点
// 函数名
const getData
// 函数的TS类型
(str: T) => string
// 函数体
function handleData(str: T): string {
return ${str}-1
;
}
// 对应到上面那个简写
// 函数名
const getData
<