TS基础之(五)TS中的泛型

避免定义多个类

一个泛型函数方法

			
				function fn<T>(v:T,s:string,ss?:T):T{			//T是约定俗成的;不一定叫这个;
				    return v;               //return 固定的东西一直报错;
				}
				function f<T>(v:T):void{
				    // return v;               //这次返回值void ;然后报错了;
				}
				fn(1,'');		没有报错;
				fn<number>(1,'')
				三个T的类型把必须要一致;
			
			
类的泛型;泛型类

			感觉上;只要写的不是固定值,都不会报错;
			
				class Cl<T>{
				    list:T[]=[];            
				    list2:Array<T>=[1];         //1不是T也报错;
				    run(arg:T):T{
				        return this.list2[1];
				    }
				    run2():T{
				        return this.list[0];
				        // return 1;               //return 固定值报错;
				    }
				}
				let a = new Cl<number>() 			这样就成了number类型的
				let a = new Cl<string>() 			这样就成了string类型的
			
			--------------
			泛型考虑的是代买的重用性;及复用性;对不确定的数据类型的支持;
			
泛型接口;

			
				、、第一种方法;
				interface A{
				    <T>(arg:T):T;
				    // name:string;
				    // age:number;				写上这两个之后;因为方法中用不到吧;一直报错;
				}
				let getA:A=function<T>(arg:T):T{
				    return arg;
				}
				alert(getA<string>('1111'))
				、、第二种方法;
				interface A{
				    (arg:T):T;
				    name:string;
				    age:number;					写上这两个之后也没有报错;
				}	
				function getA<T>(arg:T):T{
				    return arg;
				}
				alert(getA<string>('1111'))
				、、第三种
				interface Abc<T>{ 			区别在这里	
				    (arg:T):T;
				    // name:string;
				    // age:number;			这样加上没用的又报错了;
				}
				function getA<T>(arg:T):T{
				    return arg;
				}
				
				let a:Abc<string> = getA;			、、只有这里可以这样写;
				alert(getA<string>('111111'))
				alert(a('22222'))
			
			
泛型类

				
对类的约束

				类来约束类的参数
				
					class Cl1{
					    name:string | undefined;        //使用undefined之后;即使不适用constructor来给name等赋值也不会再报错了;
					    pwd:string | undefined;
					}
					class Cl2{
					    run(arg:Cl1):Cl1{            //突然感觉这个类Cl1顶替了接口的作用;
					        return arg;
					    }
					}
					let c1 = new Cl1();
					c1.name = 'name';
					let c2 = new Cl2();
					alert(c2.run(c1))
				
				类当接口用?类就是对象~
				
泛型类;

				
					class Cl1{
					    name:string | undefined;        //使用undefined之后;即使不适用constructor来给name等赋值也不会再报错了;
					    pwd:string | undefined;
					}
					class Cl2<T>{				
					    run(arg:T):any{            //就是这里变了之后就变成了泛型~
					        console.log(arg)
					        return arg;
					    }
					}
					let c1 = new Cl1();
					c1.name = 'name';
					//let c2 = new Cl2();
					let c2 = new Cl2<Cl1>();
					alert(c2.run(c1))

把类作为参数的泛型类

在这里插入图片描述
在这里插入图片描述

1、TS基础之(一)数据类型(变量)声明

2、TS基础之(二)函数声明及参数类型

3、TS基础之(三)TS中的类

4、TS基础之(四)TS中的接口 interface

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

z_healthy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值