TypeScript - 函数类型 Function Types

129 阅读2分钟

函数的类型约束,无外乎就是对函数的输入、输出进行类型限制。输入就是函数的传参,输出指的就是函数的返回值。在 JS 当中有两种函数定义方式,分别是函数声明、函数表达式。所以要从这两种情况下了解,如何对函数进行类型约束。

  1. 在函数声明的方式下,要保证新参和实参的类型、个数完全相同。如果需要某一个参数是可选的,就可以使用可选参数这样一个特性,或者使用 ES2015新增的参数默认值。可选参数也好或者默认参数也好,都必须要出现在参数列表的最后。这一点的原因其实很简单,因为参数会按照位置进行传递,如果说可选参数出现再了必选参数前面。这个时候必选参数是没有办法拿到正常的对应值,如果想要得到任意个数的参数就可以使用 ES2015 的 rest 操作符。

    function func1 (a:number, b:number, c?: number):string { // 函数声明的方式  
      return 'func1'
    }
    func(100, 200) // 要保证形参和实参的类型、个数完全相同
    
  2. 函数表达式所对应的类型限制,函数表达式它也可以使用相同的方式去限制函数的参数和返回值的类型。不过函数表达式最终是要放到一个变量当中,接收这个函数的变量也应该有类型的。一般 TS 都能根据函数表达式推断出来变量的类型,如果把一个函数作为一个参数传递,也就是回调函数这种方式。对于回调函数这种情况下,就必须要去约束我们这个回调函数的参数,也就是形参的类型。这种情况下就可以使用这种类似箭头函数的方式去表示这个参数它可以接收什么样的一个函数。这种方式在定义接口的时候经常用到,

    const func2:(a:number, b:number) => string =
    function (a:number, b:number):string {
      return 'func2'
    }