# 函数

# 函数表达式

如果要我们现在写一个对函数表达式(Function Expression)的定义,可能会写成这样:

let mySum = function (x: number, y: number): number {
  return x + y;
};
1
2
3

这是可以通过编译的,不过事实上,上面的代码只对等号右侧的匿名函数进行了类型定义,而等号左边的 mySum,是通过赋值操作进行类型推论而推断出来的。如果需要我们手动给 mySum 添加类型,则应该是这样:

let mySum: (x: number, y: number) => number = function (
  x: number,
  y: number
): number {
  return x + y;
};
1
2
3
4
5
6

注意不要混淆了 TypeScript 中的 => 和 ES6 中的 =>

在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。

在 ES6 中,=> 叫做箭头函数,应用十分广泛,可以参考 ES6 中的箭头函数 (opens new window)

# 重载

function reverse(params: string): string;
function reverse(params: number): number;
function reverse(params: string | number): string | number | void {
  if (typeof params === "string") {
    return params.split("").reverse().join("");
  } else if (typeof params === "number") {
    return Number(params.toString().split("").reverse().join(""));
  }
}

console.log(reverse(123));
console.log(reverse("123"));
1
2
3
4
5
6
7
8
9
10
11
12

注意,TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确的定义写在前面。

Last Updated: 9/1/2021, 2:33:08 PM