# ts函数

# 函数定义

# 普通函数

指定参数的类型和返回值的类型

function 函数名称(参数名称:参数类型,...):函数返回值类型{}
function add(x: number, y: number): number {
    return x + y;
}

# 函数表达式

let myAdd = function(x: number, y: number): number { return x + y; };

# 没有返回值

function viodFun():Void{
    console.log('void')
    return undefined;
}
voidFun()

# 可选参数

注意

  • es5 方法的实参和形参个数可以不一样,ts中必须一样,如果不一样就需要配置可选参数
  • 配置的可选参数必须配置在【非可选参数】的后面

在指定参数类型的冒号前面加‘?’代表该参数可选

function getUserInfo(name:string,age?:number):string{
    if(age){
        console.log(`${name}已经${age}`)
        return `${name}已经${age}`
    }else{
        console.log(`${name}的年龄保密`)
        return `${name}的年龄保密`
    }
}
getUserInfo('小王',15)
getUserInfo('小王')

# 默认参数

es5没法设置默认参数,es6和ts都可以设置默认参数

function getUserInfo(name:string,age:number=20):string{
    console.log(`${name}已经${age}`)
    return `${name}已经${age}`
}

# 剩余参数

// function add(...params:number[]):number{  // 两种定义数组的方式
function add(...params:Array<number>):number{
    return params.reduce((total,cur)=>{
        return total = total+cur;
    },0)
}
add(1,2,3,4)  // 10

其它小细节参考JavaScript函数章节的剩余参数

# 函数重载

  • java中的方法重载 :指的是两个或两个以上的同名函数,但是他们的参数不一样,这时候会出现重载的情况
  • ts中的重载 :通过为同一个函数提供多个函数定义来实现多种功能的目的

DANGER

es5中后定义的方法会覆盖先前定义的方法

ts的重载

function getUserInfo(param:any):any{
    if(typeof(param) == 'string'){
        return `我是${param}`
    }else{
        return `年龄${param}`
    }
}
getUserInfo(18)        
getUserInfo("zs") 
Last Updated: 10/4/2021, 7:52:51 PM