定义函数的四种方式:
// 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));