TS中的函数语法和JS(es5和es6的函数)的语法类似,多了TS的类型特性和规范,通过类型判断实现函数重载。
上一篇 TypeScript之interface定义对象(二)
一.函数的定义
//1 函数的定义
//es6函数声明
f1(){
console.log("hello world");
}
f1();//调用函数
//ts中定义函数 函数名(参数1:类型1,参数2:类型2,...) :返回值类型
//定义一个没有参数没有返回值的函数
f2():void{
console.log("hello world");
}
f2();//调用函数
//定义一个含参数和返回值的函数
f3(num:number):number{
//return 类型必须为number
return num;
}
console.log(f3(100));//调用函数 100
二.可选参数
JS里面方法的实参和形参数量可以不一样(定义了参数可以不传),但是TS中实参和形参必须一样(定义声明传什么),如果需要省略参数就要定义可选参数。
//注意:可选参数必须定义在最后 再参数名后面加 ?
studentInfo(name:string,age?:number):string{
if(age){
return "名字是:"+name +",年龄是:"+age;
}else{
return "名字是:"+name +",年龄保密";
}
}
console.log((studentInfo('狗蛋'))); //不传age参数
console.log((studentInfo('狗蛋', 18)));
三.默认参数
es5的函数不能设置默认参数,es6和TS中函数都可以设置默认参数
//默认参数也是定义到最后 设置默认参数age值为18
studentInfo(name:string,age:number=18):string{
return "名字是:"+name +",年龄是:"+age;
}
console.log( studentInfo('狗蛋')); // 不传年龄 默认年龄为18
四.剩余参数
使用扩展运算符(…)接收新传递的参数,此参数是一个数组,使用…展开。
// ...rest 接收函数传入其他的所有参数,rest也参数只能放在函数形参最后。
//定义一个函数计算传入数值的总和
sum(a:number,b:number,...rest:number[]):number{
let sum=a+b;
for(const item of rest ){
sum+= item
}
return sum;
}
//1,2是对应参数a,b。剩余的参数4,5,6,被存在了rest数组参数里传入函数
console.log(sum(1,2,3,4,5,6)) ;//21
五.函数重载
TS函数的重载:通过为同一个函数提供多个函数类型定义来实现不同的功能。
1.先声明
2.用any实现方法(通过判断)
//JS中若出现同名函数,后声明的会覆盖之前的(之前的函数失效)
//1.声明 TS中声明两个同名函数reloadTest,但函数接收的参数分别为string和number类型
reloadTest(str:string):string;
reloadTest(num:number):string;
//2.实现 reloadTest函数的实现(参数和返回值类型为any)
reloadTest(a:any):any{
//通过传入的参数来判断执行的方法
if(typeof a === 'string'){
return '我传入的是一个字符串'
}else{
return '我传入的是一个数字'
}
}
console.log(reloadTest('哈哈哈')); //正确执行
console.log(reloadTest(88)); //正确执行
// console.log(reloadTest(true)); //编译报错(因为未声明布尔类型参数)
没有咯。。。。。。。。。。。。。。。。。。。。。。。