Skip to content

函数类型

(箭头)函数定义类型和返回值

ts
function add(a: number, b: number): number {
  return a + b
}

// 定义箭头函数
const subtract = (a: number, b: number): number => a - b

console.log(add(1, 1))

函数的默认参数 | 函数的可选参数

ts
function add(a: number = 1, b: number = 1): number {
  return a + b
}

console.log(add())

// 可选参数
function add(a: number = 1, b?: number): number {
  return a + b
}

console.log(add()) //结果是1+undefined 为NaN

TIP

可选参数和默认值没有办法一起使用

参数是一个对象

ts
interface User {
  name: string,
  age: number
}

function add(user: User): User {
  return user
}

console.log(add({name: "张三", age: 20}))

函数中定义this类型

ts
interface Obj {
  user: Array<number>,
  add: (this: Obj, num: number) => void
}

// ts 可以定义this的类型,在js中无法使用 必须是第一个参数定义this的类型
let obj: Obj = {
  user: [1, 2, 3],
  add(this: Obj, num: number) {
    this.user.push(num)
  }
}
obj.add(4)
console.log(obj)

函数重载

ts
let num: Array<number> = [1, 2, 3, 4]

//如果传的是一个number类型的数组就做添加
function findNum(add: number[]): number[]
function findNum(id: number): Array<number>//如果传入id就是单个查询
function findNum(): Array<number>// 如果没有传入东西就是查询全部
// 最下面的函数为实现函数
function findNum(ids?: number | number[]) {
  if (typeof ids == "number") {
    //   单个查询
    return num.filter(x => x == ids)
  } else if (Array.isArray(ids)) {
    num.push(...ids)
    return num
  } else {
    //   什么都不传(查询全部)
    return num
  }
}

console.log(findNum())  //[ 1, 2, 3, 4 ]
console.log(findNum(1))  // [ 1 ]
console.log(findNum([5, 6]))  //[ 1, 2, 3, 4, 5, 6 ]