定義函數的四種方式:
// 1.用function來定義函數(返回值的number可以省略,這是由於ts的類型推斷)
function add1(x:number,y:number):number{
return x+y;
}
//2.通過變量來定義函數類型
let add2:(x:number,y:number)=>number;
//3.通過類型別名來定義函數類型
type add3=(x:number,y:number)=>number;
//4.接口定義函數類型
interface add4{
(x:number,y:number):number;
}
注意:這裏的後三種只是定義了函數的類型,並沒有具體實現。
函數參數相關:
1.函數參數必須一 一對應
- 比如,我們調用上面的函數add1(2) ,會報錯並提示我們:應有 2 個參數,但獲得 1 個。
2.可選參數必須位於必選參數之後
function add5(x:number,y?:number){
return y? x=y : x;
}
add5(1);
3.函數參數默認值相關概念
- 在調用時,在必選參數前,默認參數是不可以省略的,必須手動設置一個undefined
function add6(x:number,y=0,z:number,q=1){
return x+y+z+q;
}
add6(1,undefined,3)
函數重載
這個概念是在一些強類型語言中才有的,在JS中依據不同參數類型或參數個數執行一些不同函數體的實現很常見,依託於TypeScript,就會有需要用到這種聲明的地方。
TypeScript 中的函數重載也只是多個函數的聲明,具體的邏輯還需要自己去寫,他並不會真的將你的多個重名 function 的函數體進行合併
你可以簡單的理解爲:函數名字相同,但是參數個數,參數類型不同
//上邊是聲明
function add8(...rest:number[]):number;
function add8(...rest:string[]):string;
//下邊是實現
function add8(...rest:any[]):any{
let first=rest[0];
if(typeof first==='string'){
return rest.join('');
}
if(typeof first==='number'){
return rest.reduce((pre,next)=>pre+next)
}
}
console.log(add8(1,2,3));