定义函数类型

  1. ( params: type ) => type
  2. type Func = ( params: type ) => type
  • 小括号中的是形参与类型,箭头后的是返回值类型
  • 可以直接在变量后使用,也可以定义一个类型别名后使用
    let func: Func = params => params
    

定义函数

使用函数类型

let func: ( params: type ) => type = params => params 

let func: ( params: type ) => type = function (params) { 
    return params
}

let func: Function = params => params
  • 小括号中的是形参与类型,箭头后的是返回值类型
  • Function类型不会对函数有任何的要求

function声明、箭头函数

function name ( params: type ): type {}
const name = ( params: type ): type => {}

接口

interface Func {
    ( params: type ): type
}
const func: Func = function ( params ) {}

参数

( p1: type, p2?: type, p3:type = 123, ...p4: any[]  ) => tyep
//必传参数   可选参数    参数默认值      多余参数
  • 必传参数:调用时必须传的参数,否则会报错
  • 可选参数:调用时可不传的参数,在形参后加 **?** 定义
  • 参数默认值:形参的默认值,使用 **=** 赋值;有默认值的形参等同于可选参数
  • 多余参数:会接收从自身开始向后的所有实参,是个数组,使用 **...** 定义,之能是最后一个形参

函数重载

TS中的重载:允许使用function定义多个同名函数,调用时会根据传入的参数及个数得到对应的类型提示,接口中的方法与函数也能进行重载

function func (p1: string): string[]
function func (p1: number): number[]
function func (p1: any): (number | string)[] [] {   // 实体函数
    if ( typeof === 'string' ){
      return p1.split('')
  } else if ( typeof === 'number' ) {
      return p1.toString().split('').map(item => parseInt(item))
  } else {
      return [ p1 ]
  }
}
  • 最后一个声明的才是实体函数,不是重载的一部分;上面的才是函数重载
    • 调用函数时,实际调用的是那个实体函数
    • 因此实体的参数和返回值需要包括重载中定义的,否则会报错,最好是any
  • 需要手动对参数进行判断,并返回不同的结果