函数
函数是 JavaScript 应用程序的基础,它帮助你实现抽象层,模拟类,信息隐藏和模块。在 TypeScript 里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。TypeScript 为 JavaScript 函数添加了额外的功能,让我们可以更容易地使用。
- TypeSCript中函数实参,形参个数必须一一对应,且类型也一一对应。
 
- 函数必选参数不能位于可选参数之后。
 
- 函数必选参数前的参数如果要取默认值需要赋值undefined占位,必选参数后的参数获取默认值不需要传undefined。
 
- 在 JavaScript 里,你可以使用 arguments 来访问所有传入的参数。在 TypeScript 里,你可以把所有参数收集到一个变量里,剩余参数会被当做个数不限的可选参数。
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   |  let add1: (x: number, y: number) => number
 
  type add2 = (x: number, y: number) => number
 
  interface add3 {     (x: number, y: number): number }
 
  let add: add3 = (x, y) => x + y;
 
  add(1,2,3)
 
  function add4(x:number,y?:number,z:number){     return y ? x + y : x; }
 
  function add5(x: number, y = 0, z: number, q = 1) {   return x + y + z + q; }
  console.log(add5(1, undefined, 3));
 
  | 
 
函数重载
在C++或者java等静态语言中,两个函数名称相同,但是参数类型不同或者参数个数不同,就实现了函数重载。
函数重载的好处是:不需要为功能相似的函数起不同的名称,增强了函数的可读性。
函数重载一般在实现时用any类型
编译器选择正确的检查类型时,它查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。因此,在定义重载的时候,一定要把最精确的定义放在最前面。
1 2 3 4 5 6 7 8 9 10 11 12 13
   | function add(...rest: number[]): number; function add(...rest: string[]): string; function add(...rest: any[]) {     let first = rest[0];     if (typeof first === 'number') {         return rest.reduce((pre, cur) => pre + cur);     }     if (typeof first === 'string') {         return rest.join('');     } } console.log(add(1, 2))  console.log(add('a', 'b', 'c')) 
   | 
 
参考