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'); // 错误

上一篇下一篇

猜你喜欢

热点阅读