重载的优势
优势1: 结构分明
让 代码可读性,可维护性提升许多,而且代码更漂亮。
优势2: 各司其职,自动提示方法和属性:
每个重载签名函数完成各自功能,输出取值时不用强制转换就能出现自动提示,从而提高开发效率
优势3: 更利于功能扩展
方法的重载
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 value !== ele
}
})
return value;
}
也可以写成
remove(value: number): number
remove(value: object): object
remove(value: any): any {
this.element = this.element.filter((ele, index) => {
if (typeof value === "number") {
return value !== index
} else {
return value !== ele
}
})
return value;
}
构造器的重载
写法与方法重载一样
constructor(width?:number,height?:number)
constructor(side?:OJType)
constructor(v1:any,v2?:any){
if(typeof v1==='object'){
this.width=v1.width;
this.height=v1.height
}else{
this.width=v1;
this.height=v2;
}
}
重载与普通函数的用法区别
方法有不同个数的参数用重载
function func (a: number): number
function func (a: number, b: number): number
方法的参数是不同类型的用函数
function func (a: number): number
function func (a: string): number
//我们使用以下方式进行替代
function func (a: number | string): number
方法的返回值不同的用重载
function test(a: number, b: string): void;
function test(a: number, b: string): number | void{
if (typeof b !== 'undefined') {
console.log(b)
} else {
return a+1
}
}