函数

函数是JavaScript应用程序的基础。 它帮助你实现抽象层,模拟类,信息隐藏和模块。 在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义 行为的地方。 TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用。

和JavaScript一样,TypeScript函数可以创建有名字的函数和匿名函数。 

函数声明

// es5定义函数的方法
//函数的声明类
function run(){
    return "run"
}
//匿名函数
var run2=function(){
    return "run2"
}
//ts中定义函数的方法
//函数声明法
function run():string{
    return "run"  //正确
   // return 123  //错误
}
console.log(run())
//匿名函数法
var fun=function():number{
    //return "run"  //错误
    return 123  //正确
}
console.log(fun())

 

 ts中定义方法传参

//ts中定义方法传参
function getinfo(name:string,age:number):string{
    return `${name}+${age}`;
}
console.log(getinfo("小明",20))

传入参数的时候注意,参数的指定类型,如果传入的参数的类型与指定类型不同就会报错

 

 比如在这里定义name指定类型为number,此时传入的数据为字符串就会报错

 ts中匿名方法传参

var getinfo=function(name:string,age:number):string{
    return  `${name}+${age}`;
}
console.log(getinfo("小明",20))

 

 没有返回值的方法

//没有返回值的方法
function run():void{
    console.log(123)
}
run()

方法的可选参数

//方法的可选参数
// es5中方法的形参和实参可以不一样,但是在ts中必须一样,如果不一样就需要配置可选参数
function getinfo(name:string,age:number):string{
    if(age){
        return `${name}+${age}`;
    }else{
        return name
    }
}
console.log(getinfo("小明"))

此时代码会执行,但是在ts中会编译不通过

 

 编译后的1.js文件

 

 我们可以在age后加一个“?”,表示这个age可传可不传

function getinfo(name:string,age?:number):string{
    if(age){
        return `${name}+${age}`;
    }else{
        return name
    }
}
console.log(getinfo("小明"))

此时就不会编译报错

注意:可选参数必须配置到参数的最后面

此时我们的name参数是可选的

function getinfo(name?:string,age:number):string{
    if(age){
        return `${name}+${age}`;
    }else{
        return name
    }
}
console.log(getinfo("小明"))

在ts编译中会报错,但是会正常输出

 

 这是错误的写法,可选参数必须配置到参数的最后面

默认参数

es5中没法设置默认参数,但是在es6和ts中都可以设置默认参数
function getinfo(name:string,age:number=20):string{
    if(age){
        return `${name}+${age}`;
    }else{
        return name
    }
}
console.log(getinfo("小明"))

看一下编译后的js文件

 

 当我们传入的参数有age时

console.log(getinfo("小明",30));

 

 就会按照传入的参数输出

剩余参数

function sum(a:number,b:number,c:number):number{
    return a+b+c
}
console.log(sum(1,2,3))

 编译后的js文件

 

 此时我们传入的参数较多时,就会报错

console.log(sum(1,2,3,4,5,6))

 

 如果此时我们传入的参数较多怎么办?

用...运算符

function sum(...result:number[]):number{
    var sum=0;
    for(let i=0;i<result.length;i++){
        sum+=result[i]
    }
    return sum
}
console.log(sum(1,2,3))
//三元运算符接收形参传过来的值
console.log(sum(1,2,3,4,5,6))

编译后的js文件

 

 我们看这种情况

function sum(a:number,...result:number[]):number{
    var sum=a;
    for(let i=0;i<result.length;i++){
        sum+=result[i]
    }
    return sum
}
console.log(sum(1,2,3))
//三元运算符接收形参传过来的值
console.log(sum(1,2,3,4,5,6))

此时传入参数,a的值就为第一个参数,剩余的参数都在result中

函数重载

typescript中的重载,通过为同一个函数提供多个函数类型定义来进行函数重载

重载就相当于同名的函数传入不同的参数执行出不同的结果

es5中出现同名的方法,下面的会替换上面的方法
function fun(config:any):any{

}
function fun(config:any,value:any):any{
       //替换上面的函数
}    

在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("小明"))
console.log(getinfo(20))

我们看编译之后的js文件

 

 

 

 

posted @ 2021-11-03 18:31  keyeking  阅读(29)  评论(0编辑  收藏  举报