2020年11月12日
ts-泛型
泛型是解决类 接口 方法的复用性以及不特定数据类型的支持。可以使用泛型
来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。
- 泛型函数
function getData<T>(val:T):T{ return val; } getData<number>(123); getData<string>('123');
T表示泛型函数,具体什么类型是调用这个方法的时候决定。通过<xxx>来决定
- 泛型类:比如有最小堆算法,需要同时支持返回数字和字符串两种类型。
class minClass<t>{ list:t[] = []; add(val:t){ this.list.push(val); } min():t{ var minNum = this.list[0]; for(var i=0;i<this.list.length;i++){ if(minNum>this.list[i]){ minNum = this.list[i]; } } return minNum; } } var m = new minClass<number>(); m.add(2); m.add(12); m.add(32); m.add(8); m.min();//2
- 泛型接口
interface con{ <t>(val:t):t; } var getDatas:con =function<t>(val:t):t{ return val; } getData<string>('a') interface con1<t>{ (val:t):t; } var getDatas1:con1<string> =function<t>(val:t):t{ return val; } getDatas1('a');
- 泛型类
把类当作参数的泛型类,约束数据传入的类型
class User{ userName:string | undefined; password:string | undefined; } class mysql{ add(user:User):boolean{ console.log(user); return true; } } // 泛型类 class mysql1<t>{ add(user:t):boolean{ console.log(user); return true; } } var u = new User(); u.userName = 'a' u.password = '123' var my = new mysql(); my.add(u); var my1 = new mysql1<User>(); my1.add(u);