# 函数的相关约束

> 函数重载: 在函数实现之前,对函数调用的多种情况进行声明  

```
/**
 * 得到a 和 b 相乘的结果
 * @param a 
 * @param b 
 */
function combine(a: number, b: number): number;
/**
 * 得到 a 和 b 拼接的结果
 * @param a 
 * @param b 
 */
function combine(a: string, b: string): string;
function combine(a: number | string, b: number | string): number | string {
    if (typeof a === 'number' && typeof b === "number") {
        return a * b;
    } else if (typeof a === 'string' && typeof b === 'string') {
        return a + b;
    }
    throw new Error("a和b必须是相同的类型");
}

const a = combine(1,2);
```


> 可选参数:可以在某些参数名后加上问号,表示该参数可以不用传递。可选参数必须在参数列表的末尾。  

```
function sum(a: number, b:number = 0, c?:number){
    if(c){
        return a + b + c;
    }else{
        return a + b;
    }
}

sum(3, 4);
sum(3,4,5);
```

其他内容