Skip to content

泛型

TIP

软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

泛型就是解决类 接口 方法的复用性 以及对不特定数据类型的支持

传入什么返回什么类型 T表示泛型 具体什么类型是调用这个方法时候决定的

function getData<T>(value:T):T{
    console.log(value)
    return value
 }
 getData<number>(123);
 getData<string>('123字符串');

泛型类

class MinClass<T>{
    public list:T[]=[];
    add(val:T):void{
        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 min=new MinClass<number>(); //实例化类  并且制定了类的T代表的类型是number
min.add(2);
min.add(22);
min.add(12);
console.log(min.min())

泛型接口

//第一种
interface Config{
    <T>(val:T):T;
}
var setData:Config=function<T>(val:T):T{
    return val
}
console.log(setData<string>('hao'))
console.log(setData<number>(123))

//第二种

interface Config<T>{
    (val:T):T;
}
function setData<T>(val:T):T{
    return val
}
var getData:Config<string>=setData;
console.log(getData('hao'))

泛型约束 extends

interface len{
  length: number;
}

function fun<T extends len>(arg:T):T{
  console.log(arg.length)
  return arg
}

fun('ab')