Ts中的泛型、泛型类

  • 泛型类
class minClass {
    public list:number[] = []
	
	add(num:number) {
        this.list.push(num)
    }

	minNumber():number {
        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()
    m.add(1)
	m.add(2)
	console.log(m.minNumber()) 
}
class minClass2<T> {
    public list:T[] = []

	add(value:T)void {
        this.list.push(value)
    }
    
    minNumber():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 minClass2<number>();
m.add(1);
m.add(2);

var m2 = new minClass2<string>();
m2.add('a');
m2.add('b');
  • 泛型接口
// 定义一个函数接口
interface ConfigFn {
    (v1:string,v2:string):string;
}

let setData:ConfigFn = function(v1:string,v2:string):string {
    return v1 + v2;
}


// 定义泛型方法
interface ConfigFn2 {
    <T>(value:T):T;
}

let getData:ConfigFn2 = function<T>(value:T):T {
    return value
}

// 定义泛型接口
interface ConfigFn3<T>{
    (value:T):T;
}

let myGetData:ConfigFn3<string> = function<T>(value:T):T{
    return value;
}
  • 泛型类
    • 把类作为参数来约束数据传入的类型:定义一个User的类这个类的作用就是映射数据库字段,然后定义一个MysqlDb的类用于操作数据库,之后把user类作为参数传入到MysqlDb中
// User类来映射数据库字段
class User {
    userName:string | undefined;
    password:string | undefined;
}

class MySqlDB {
    add(user:User):boolean {
        console.log(user)
        return true
    }
}

class Person {
    name:string | undefined;
    age:number | undefined;
    id:number | undefined;
    constructor(params:{
        name:string | undefined,
        age:number | undefined,
        id?:number | undefind
    }) {
       this.name = params.name;
        this.age = params.age;
        this.id = params.id;
    }
}

let p = new Persion({
    name:'张三',
    age:20
})


泛型的使用方法

function test<T>(arg:T):T {
    return arg;
}
  • 可以用两种方法使用
      1. 传入所有参数,包括类型参数
    • let out = test<string>('yivi');
    • 2.使用类型推论,编译器会自动进行类型推断
    • let out = test('yivi');
  • 泛型变量
    • function test<T>(arg:T):T { console.log(arg.length) // error,arg的类型为T,无明确指示方法,因此报错 return arg; }
    • 当操作T类型的数组时,.length的属性是存在的,因此不会报错
function test<T>(args : T[]):T[] {
	console.log(args.length)
    return args;
}

function test<T>(args:Array<T>):Array<T> {
    console.log(args.length)
    return args;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值