前言:在ts中对于函数的定义其实与在js中的几乎是一模一样的,无非是要指定返回的数据类型,和要传递的参数类型。
一.函数的定义
1.有返回值的函数:在ts中需要指定返回值的数据类型
// js中的定义
function run(){
return 123
}
run()
// ts中的定义
function run1():number{
return 123
}
run1()
2.需要传参的函数:在ts中函数传参需要指明参数的数据类型
function getInfo(name:string,age:number):string{
return `${name}-----${age}`;
}
console.log(getInfo("ME",18))//ME-----18
3.没有返回值的函数:需要指明该函数没有返回值
function run():void{
console.log("没有返回值")
}
二.可选参数:在一个参数后面加?,指定一个参数可传可不传,如果不加?,该参数为必传项。(注意:可选参数,一定要写在,必传参数的后面,不能把可选参数写在前面)
function getInfo(name:string,age?:number):string{
if(age){
return `${name}-----${age}`;
}else{
return `${name}-----年龄保密`;
}
}
console.log(getInfo("ME"));//ME-----年龄保密
console.log(getInfo("ME",18));//ME-----18
三.默认参数:给参数设置默认值,在不传该参数的情况下,就以默认值为准(默认参数不用考虑参数的顺序)
function getInfo(name:string,age:number=20):string{
if(age){
return `${name}-----${age}`;
}else{
return `${name}-----年龄保密`;
}
}
console.log(getInfo("ME"));//ME-----20
console.log(getInfo("ME",18));//ME-----18
四,剩余参数:就是再不确定所要传的参数有几个时,用es6的三点运算符来接收参数。
//方法一 (所有的参数都由三点运算符代替)
function sum(...result:number[]):number{
var sum=0;
for(var i=0;i<result.length;i++){
sum+=result[i];
}
return sum
}
console.log(sum(1,2,3)) //6
console.log(sum(1,2,3,4)) //10
//方法二 (后面的部分参数由三点运算符代替)
function sum(a:number,b:number,...result:number[]):number{
var sum=a+b;
for(var i=0;i<result.length;i++){
sum+=result[i];
}
return sum
}
console.log(sum(1,2,3)) //6 1,2,这两个参数分别为a,b 3由三点运算符代替
console.log(sum(1,2,3,4)) //10 1,2,这两个参数分别为a,b 3,4由三点运算符代替
五.函数重载:java中方法的重载,重载指的是两个或者两个以上同名函数,但他们的参数不一样,这时会出现函数重载的情况。typeScript中的重载,通过为同一个函数提供多个函数类型定义来试下多种功能的目的。
在js中函数方法的重名,下面的方法会替换上面的方法,而在ts中支持方法的重载。
function getInfo(name:string):string;
function getInfo(age:number):number;
function getInfo(str:any):any{
if(typeof str==="string"){
return '我叫:'+str;
}else{
return '我的年龄是:'+str;
}
}
console.log(getInfo('ME')); //我叫:ME
console.log(getInfo(18)); //我的年龄是:18
console.log(getInfo(true));//错误写法,因为函数重载中不包含boolean数据类型
function getInfo(name:string):string;
function getInfo(name:string,age:number):string;
function getInfo(name:any,age?:any):any{
if(age){
return '我叫:'+name+'我的年龄是'+age;
}else{
return '我叫:'+name;
}
}
console.log(getInfo('ME'));//我叫:ME
console.log(getInfo("ME",18));//我叫:ME我的年龄是18
六.箭头函数:箭头函数提供了一种更加简洁的函数书写方式
setTimeout(function(){
console.log("我是普通函数")
},1000)
//去掉function关键字,在()后面添加等号和右尖括号
setTimeout(()=>{
console.log("我是箭头函数")
},2000)