TS-中篇: 函数类型

143 阅读1分钟

开篇

世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。--罗曼罗兰

函数写法

函数类型一般写法: 表达式写法(常用)

(参数: 参数类型) => 返回值类型

type fooType = (num: number) => number
cosnt foo: fooType = (num: number) => {
  return num * 2
}

函数类型的调用签名写法:

函数调用签名是从对象角度看待函数, 不仅可以调用函数, 还可以有其他属性

interface Ifoo {
  name: string
  age: number
  (num: number): number
}
const foo: Ifoo = (num: number) => {
  return num * num
}
foo.name = "foo"
foo.age = 33
foo(123)

函数的参数

可选参数

function foo(x: number, y?: number) {
  if(y !== undefined) {
    console.log(x + y)
  }
}
foo(1)

默认参数

传入一个参数相当于undefined, 传入一个参数和传入一个undefined

function foo(x: number, y = 111) {
  console.log(x + y)
}
foo(1)
foo(2, undefined)

剩余参数

function foo(...args: any[]) {
}
foo(1, "fsadf", true)

函数的重载

在一个函数中定义多个同名的函数声明,这些函数声明可以有不同的参数类型、参数数量或返回值类型,用于为不同的输入提供不同的处理逻辑。开发中尽量使用联合类型, 若联合类型解决不了的时候就要用的重载。

// 函数重载签名
  function res(para1: number, para2: number): number
  function res(para1: string, para: string): string
  // 通用函数
  function res(para1: any, para2: any) {
    return para1 + para2
  }

  // 不能直接调用通用函数(也就是不能传入通用函数的参数支持的类型)
  console.log(res(1, 2))
  console.log(res("aaa", "bbb"))