ts重载练习案例

271 阅读1分钟
// 计算正方形面积   TS constructor的重载
type type_chartParam={
    width?:number,
    height?:number,
    radius?:number
}
class Square {
    public wtidth:number;
    public height:number;
    constructor (width_:number,height_:number)
    constructor (paramsObj:type_chartParam) 
    constructor (value:any,height=0){
        if( typeof value==="object") {
            this.wtidth=value.width
            this.height=value.height
        }else{
            this.wtidth=value
            this.height=height
        }
    }
    public getArea():number {
        return this.wtidth*this.height
    }
}
let square=new Square(40,50)
console.log(square.getArea());
let chartParams:type_chartParam={width:50,height:90}
let square2=new Square(chartParams)
console.log(square2.getArea());

方法的重载
// 1对现有的数组进行封装,让数组增删改,变的更加好用
// 2提供get方法 remove方法 显示方法 
// 其中需求中remove方法有两个,我们用方法重载来实现

class ArrayList {
    // 第一步定义一个引用属性【数组】
    constructor (public element:Array<object>) {

    }
    // 第二步 根据索引来查询数组中指定的元素
    get(index:number) {
        return this.element[index]
    }
    // 第三步 显示方法
    show () {
        this.element.forEach(ele=>{
            console.log(ele);
            
        })
    }
    // 第四步 删除方法 
    // 1 :传入数字,删除数组对应的索引的值,并返回数字
    // 2:传入对象,删除对象并返回删除的对象
    remove (value:number) :number
    remove (value:object) :object
    remove(value:number |object):number |object {
            this.element=this.element.filter(((ele,index)=>{
                if(typeof value==="number") { //根据索引删除
                    return value !==index
                }else { //根据对象删除
                    return JSON.stringify(value)!==JSON.stringify(ele)
                }
               
            }))
            return value
    }

    
}

let stuOne={stuName:'zhangsan',age:23}
let stuTwo={stuName:'lisi',age:29}
let stuThree={stuName:'liqing',age:30}
let arrList=new ArrayList([stuOne,stuTwo,stuThree])
arrList.show()
let value=arrList.remove({stuName:'zhangsan',age:23})
console.log(value,'value');
arrList.show()