8.泛型-类
2020-02-17 本文已影响0人
我只会吃饭
泛型类
例如:number类型,假设定义一个类找出最大元素,并且传入参数及返回的值的类型必须一致
class MaxClass {
// list:Array<number> = [];
list:number[] = [];
push(n:number) {
this.list.push(n);
}
findMax():number {
let max = this.list[0];
for(let it of this.list) {
if (max <= it) {
max = it
}
}
return max;
}
}
let m = new MaxClass();
m.push(1);
m.push(3);
console.log(m.findMax());
定义成泛型类: 则可以支持多种类型
class MaxClass1<T> {
list:T[] = [];
add(n:T) {
this.list.push(n);
}
findMax():T {
let max = this.list[0];
for(let it of this.list) {
if (max <= it) {
max = it
}
}
return max;
}
}
let m1 = new MaxClass1<string>();
m1.add('a');
m1.add('y');
console.log(m1.findMax())
let m2 = new MaxClass1<number>();
m2.add(4);
m2.add(5);
console.log(m2.findMax())
使用类约束泛型类的参数
// 泛型类
// 公交
class Bus<T> {
list:Array<T>
constructor() {
this.list = [];
}
up(f:T) {
this.list.push(f);
}
}
// 字符串
let strBus = new Bus<string>();
// 数值公交
let numBus = new Bus<number>();
// 我想传给类
// 乘客
class Fare {
fname:string|undefined;
}
let fareBus = new Bus<Fare>();
let fare = new Fare();
fare.fname = 'kele'
// 这个乘客公交,只能上Fare的实例
fareBus.up(fare);
// fareBus.up('abs'); // 错误