在typescript中,需要对函数的输入和输出都考虑进行约束
1、函数声明方式
function sum(x:number=12,y?:number):number{
return x+y
}
- 在形参中对输入的参数进行了约束,必须指定类型,不确定的参数类型使用any
- 在括号之后对输出进行了约束。对输出可以不指定类型。
- 如果指定了输出类型,输出值的类型与定义的输出类型不一致就会报错
- 输入多余的(或者少于要求的)参数会报错
1、可选参数
y?:number中的?号,表示y参数是一个可选参数
可选参数必须接在必选参数的后面
2、默认参数
y=12表示y的默认参数是12,当没有传y时使用12这个值。此时y由类型推断为number,不用定义y的类型,或者定义y的类型为any
3、剩余参数
function mySum(...args:number[]):number{
let sum=0;
for(let i=0;i<args.length;i++){
sum+=args[i]
}
return sum
}
- 使用…rest运算符定义形参
- 使用:number[]定义args的类型
剩余参数是放在函数声明的时候所有参数的最后。
2、函数表达式方式
let mySum=(x:number,y:number):number=>{
return x+y
}
上面表达式等号的右边,函数部分进行了类型定义
等号的左边,函数的接收变量mySum没有进行类型定义,它的类型是通过这个表达式的赋值操作进行类型推断而来的。
在定义mySum时,也可以给它添加类型定义。
let mySum:(x:number,y:number)=>number=(x:number,y:number):number=>{
return x+y
}
(x:number,y:number)=>number就是mySum这个变量的类型。
3、用接口定义函数
定义接口
interface MySum{
(x:number,y:number):number
}
使用接口定义函数
let mySum:MySum=function(x:number,y:number):number{
return x+y
}
或者
let mySum:MySum=function(x,y){
return x+y
}
4、函数重载
重载函数声明
function add (x: string, y: string): string
function add (x: number, y: number): number
// 定义函数实现
function add(x: string | number, y: string | number): string | number {
// 在实现上我们要注意严格判断两个参数的类型是否相等,而不能简单的写一个 x + y
if (typeof x === 'string' && typeof y === 'string') {
return x + y
} else if (typeof x === 'number' && typeof y === 'number') {
return x + y
}
}
add方法只能同时传入两个字符串,或者同时传入两个数字。