函数

函数类型

let greetUnnamed: (name: string) => string
greetUnnamed = function (name: string): string {
  if (name) {
    return `Hi!${name}!`
  }
}

首先声明了一个变量greetUnnamed,该变量的类型是一个包含String类型参数,调用后返回String类型数据的函数。
在声明这个变量以后,一个符合改变量类型的函数被赋值给了这个函数。

这个函数还可以在一行中完成,如下:

let greetUnnamed: (name: string) => string = function (name: string): string {
  if (name) {
    return `Hi!${name}!`
  }
}

可选参数

一般在使用函数的时候,有的时候并不会传递所有的函数参数,可以使用选择形参的方式书写

function add(a: number, b: number, c?: number): number {
  let sum = a + b
  if (c !== undefined) {
    sum += c
  }
  return sum
}

这个函数里面就用到了可选形参,即在形参 c?,调用add的时候,对应的实参c可以不用传递。


默认参数

一般在使用函数的时候,有的时候形参会有默认的值,可以使用默认实参的方式书写

function add(a: number, b: number = 0, c?: number) {
  let sum = a + b
  if (c !== undefined) {
    sum += c
  }
  return sum
}

调用这个函数的时候,b的默认值就是0


函数重载

类似java中的@Overwrite,TS中可以进行方法的重载

function test(name: string): string;                  // 重载签名
function test(age: number): string;                   // 重载签名
function test(value: (string | number)): string {     // 实现签名
  swicth(typeof value) {
    case 'string':
     return `My name is ${value}!`
    case 'number':
     return `I'm ${age} years old.`
    default:
      console.log('Invalid Operation!')
  }
}

特定的重载签名

interface Document {
  createElement(tagName: 'div'): HTMLDivElement         // 特定重载签名
  createElement(tagName: 'span'): HTMLSpanElement       // 特定重载签名
  createElement(tagName: 'canvas'): HTMLCanvasElement   // 特定重载签名
  createElement(tagName: string): HTMLElement           // 非特定重载签名
}

当编写重载签名的时候,必须在最后列出非重载签名


你可能感兴趣的:(函数)