一、函数定义

  1. function 函数名(): 返回值类型 {} // 如果函数没有返回值,则定义为 void
  2. let 变量名: Function = 函数名(): 返回值类型 {};
  3. // 函数声明法
  4. function func(): string {
  5. return 'function'
  6. }
  7. // 匿名函数
  8. let func = function(): number {
  9. return 123;
  10. }

二、形参类型

实参和形参的类型和数量要一样。

  1. function 函数名(形参1: 类型, 形参2: 类型): 返回值类型 {}
  2. let 变量名: 变量类型 = 函数名(实参1, 实参2);

三、可选参数

参数可传可不传

  1. function 函数名(形参 ? : 类型) : 返回值类型 {}

四、默认值

带默认值的参数,本身也是可选的,因此可以不用写 ?

  1. function 函数名(形参: 类型 = 默认值) : 返回值类型 {}
  2. 函数名(undefined, 实参2); ===> 函数名(默认值1, 实参2);

五、剩余参数

  • 剩余参数只能定义有一个
  • 剩余参数只能定义为数组
  • 剩余参数只能定义在形参列表最后
    1. function add(形参1: 类型, 形参2: 类型, ...形参3: 类型[]) :返回值类型 {}

    六、函数重载

    java 中方法的重载:指的是两个或两个以上同名函数,但它们的参数不一样,这时会出现函数重载的情况

    TypeScript 中的重载:通过为一个函数提供多个函数类型定义来实现多种功能的目的

    • ts 为了兼容 es5 以及 es6 ,重载的写法和 java 中有区别
    • es5/6 中出现同名函数会出现覆盖。
  1. let suits = ["hearts", "spades", "clubs", "diamonds"];
  2. function pickCard(x: { suit: string; card: number; }[]): number;
  3. function pickCard(x: number): { suit: string; card: number; };
  4. function pickCard(x): any {
  5. // Check to see if we're working with an object/array
  6. // if so, they gave us the deck and we'll pick the card
  7. if (typeof x == "object") {
  8. let pickedCard = Math.floor(Math.random() * x.length);
  9. return pickedCard;
  10. }
  11. // Otherwise just let them pick the card
  12. else if (typeof x == "number") {
  13. let pickedSuit = Math.floor(x / 13);
  14. return { suit: suits[pickedSuit], card: x % 13 };
  15. }
  16. }
  17. let myDeck = [{ suit: "diamonds", card: 2 }, { suit: "spades", card: 10 }, { suit: "hearts", card: 4 }];
  18. let pickedCard1 = myDeck[pickCard(myDeck)];
  19. alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);
  20. let pickedCard2 = pickCard(15);
  21. alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);

为了让编译器能够选择正确的检查类型,它与 JavaScript 里的处理流程相似。 它查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。 因此,在定义重载的时候,一定要把最精确的定义放在最前面。
注意,function pickCard(x): any并不是重载列表的一部分,因此这里只有两个重载:一个是接收对象,另一个接收数字。 以其它参数调用 pickCard会产生错误。