TS学习笔记2-函数类型

102 阅读1分钟

函数类型

函数需要定义参数和返回值的类型,返回值类型可以忽略,因为可以自动推断。

当函数没有返回值时,默认返回void

function a(x:number,y:number){
            return x+y
        }

image.png

可以看出ts自动推断出返回值时number

function a(){}

image.png

没有返回值时为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)
  }
}