函数类型
函数需要定义参数和返回值的类型,返回值类型可以忽略,因为可以自动推断。
当函数没有返回值时,默认返回void
function a(x:number,y:number){
return x+y
}
可以看出ts自动推断出返回值时number
function a(){}
没有返回值时为void
函数的参数可以用?设置可选参数,但是可选参数一定是在最后面!!!
function a(x:number,y?:number){
if(y) return x+y
return x
}
a(1),
a(1,2)
函数的参数可以用=设置默认参数,默认参数可以放到任意位置,但是使用时需要用undefined占位
function a(x:number=1,y:number){
return x+y
}
a(undefined,1),
a(2,2)
函数可以重载,同名函数可以定义不同类型的参数
function add(x: number[]): number
function add(x: string[]): string
function add(x: any[]): any {
if (typeof x[0] === 'string') {
return x.join()
}
if (typeof x[0] === 'number') {
return x.reduce((acc, cur) => acc + cur)
}
}
也可以定义不同数量的参数
function add(x: number[]): number
function add(x: string[]): string
function add(x: number[], y: number[]): number
function add(x: string[], y: string[]): string
function add(x: any[], y?: any[]): any {
if (Array.isArray(y) && typeof y[0] === 'number') {
return x.reduce((acc, cur) => acc + cur) + y.reduce((acc, cur) => acc + cur)
}
if (Array.isArray(y) && typeof y[0] === 'string') {
return x.join() + ',' + y.join()
}
if (typeof x[0] === 'string') {
return x.join()
}
if (typeof x[0] === 'number') {
return x.reduce((acc, cur) => acc + cur)
}
}