# 函数声明

函数声明有两种方式:

  1. 通过function关键字来进行声明
  2. 通过表达式方式声明
// 通过 function 关键字声明
function sum1(a:number, b:number):number {
  return a + b
}

// 通过表达式声明
const sum2 = (a:number, b:number):number => {
  return a + b
}

// 如果是表达式形式的,我们给这个变量定义了类型,需要把一个兼容的函数赋值给它
type Sum = (a:number, b:number) => number
const sum3:Sum = (a, b) => {
  return a + b
}

# 可选参数

可选参数必须在其他参数的最后面

// b? 表示b可以不传
const sum4 = (a: number, b?:number):number => {
  // return a + b // Object is possibly 'undefined'
  return a + (b as number)
}

# 默认参数

const sum5 = (a:number, b:number = 2):number => {
  return a + b
}

# 剩余参数

const sum6 = (...args:number[]) => {}
sum6(1, 2, 3, 4)

# 函数重载

function toArray(value:number):number[]
function toArray(value:string):string[]
function toArray(value:number|string) {
  if (typeof value === 'string') {
    return value.split('')
  }else {
    return value.toString().split('').map(item=>parseInt(item))
  }
}

// 根据传入不同类型的数据 返回不同的结果
toArray(123)
toArray('123')