TypeScript函数重载

57 阅读1分钟

前言

我们看下官方的函数date方法,在使用过程中的参数提醒很友好

image.png

全局代码块中声明的函数

但我们在ts中使用函数中经常会遇到这种情况,函数的参数是灵活多变的,既可以不传,也可以传不同类型的参数,比如下面的message函数实现

function message(
  params1?: string | object,
  params2?: string | number | Function,
  params3?: Function | number
) {}

message()

这种函数实现后有一个很大的弊端就是在使用时提示很不友好,此时就需要用到函数重载

image.png

function message(options: object):void
function message(text: string, onClose?: Function):void
function message(text: string, mode: string, duration?: number):void
function message(text: string, duration?: number, onClose?: Function):void

function message(
  params1?: string | object,
  params2?: string | number | Function,
  params3?: Function | number
) {}

message()

这样函数的提示就会好多了
image.png

在对象中声明的函数

如果函数在一个对象中,那么实现的方式需要绕一下,如下

interface ShowMessage {
  (options: object):void
  (text: string, onClose?: Function):void
  (text: string, mode: string, duration?: number):void
  (text: string, duration?: number, onClose?: Function):void
}

interface Utils {
  showMessage: ShowMessage
}

const utils: Utils = {
  showMessage: (
      params1?: string | object,
      params2?: string | number | Function,
      params3?: Function | number
    ) => {}
}

utils.showMessage()