【Typescript -学习笔记】 泛型

1.泛型的语法为函数名字后面跟一个<参数名> 比如:T
2.当我们使用这个函数的时候把参数的类型传进去就可以了 (也就是动态类型)

//举例
function num (a:number,b:number) : Array<number> {
    return [a ,b];
}
num(1,2)
function str (a:string,b:string) : Array<string> {
    return [a ,b];
}
str('t','c')

//动态类型写法:
function add(a:T,b:T):Array<T>{
	return [a,b]
}
add<number>(1,2) //也可写成add(1,2)
add<string>('t','c') //也可写成add('t','c')
//两种写法都可以,注释里的写法是因为ts可以自动推算出类型。

//多类型的泛型
function add<T | U>(a:T,b:U):Array<T|U>{
	let arr:Array<T|U> = [a,b] 
	return arr
}
add(1,'t') 
add('t',2)
add(1,true)
……

//泛型约束:获取传值的length
interface len{
	length:number
}
function getLen<T extends len>(arg:T){
	return arg.length
}
getLen([1,2,3]) 
getLen(123) //error

//keyof 约束类型
//其中使用了TS泛型和泛型约束,利用keyof 分割 T ,T就是传进来的对象,分割完就是联合类型,再用K继承联合类型,k就是传入对象的元素,从而达到约束类型
function test<T, K extends keyof T>(obj: T, key: K) {
   return obj[key]
}
let ob = { a: 1, b: 2, c: 3 }
test(ob, 'a') 
test(ob, 'd') //ob不存在‘d’所以报错

//泛型类
//声明方法:名称后定义<类型>
//使用时:确定类型new Sub<number>()

class Tc:<T>{
	arr:T[] = []
	add(a:T):T{
		return [a]
	}
}

let t = new Tc<number>()
t.arr[1,2,3]//new的时候约束Tc为number,故只能传number类型的值
t.add(123)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值