天天看點

Ts的函數

1. 函數 匿名函數  void無傳回值

function f1(): void {
  console.log(1);
}
let f2 = function (): void {
  console.log(1);
}; // 匿名函數

// type 定義類型别名
type F22 = (x: string, y: number) => string;
let f22: F22 = function (a, b) {
  return a + b;
};
let f222: F22 = function (a: string, b: number): string {
  return a + b;
};

type T1 = string | number;
function aa(msg: T1) {
  if (typeof msg === "number") {
    console.log("number");
  } else {
    console.log("string");
  }
}
           

2. 傳回值

function f3(): number {
  return 123;
} // 表示number類型傳回值 void就是無傳回值
           

3. 傳參 (要指定類型,每個參數)

function f4(a: number, b: string): string {
  return a + b;
}

console.log(f4(1, "2")); // 12 沒有可選參數時,必須都傳
           

4. 可選參數 用?表示 表示可以不傳此參數,但是可選參數必須放到最後

function f5(a: number, b?: string): string {
  // 這邊不能直接 return a + b; 因為b可能不存在
  if (b) {
    return a + b;
  } else {
    return a + "沒有定義";
  }
}
console.log(f5(1)); // 1沒有定義
console.log(f6(1, "666")); // 1666
           

5.預設參數

function f6(a: number, b: string = "預設"): string {
  return a + b; // 這裡b就有了預設值
}
console.log(f6(1)); // 1預設
console.log(f6(1, "666")); // 1666
           

6.剩餘參數 用的是...延展符

function f7(a: number, b: number, ...result: number[]): number {
  let sum = a + b;
  result.forEach((n) => {
    sum += n;
  });
  return sum;
}
console.log(f7(1, 2)); // 3
console.log(f7(1, 2, 3)); // 6  result= [3]
console.log(f7(1, 2, 3, 4, 5, 6)); // 21  // result= [3,4,5,6]
           

7.函數重構 方法名相同,參數類型或個數不同 ts的重構是沒有方法體的

function f8(a: number): number;
function f8(b: string): string;
function f8(str: any): any {
  if (typeof str === "number") {
    return 123;
  } else {
    return "字元串";
  }
}
console.log(f8(1)); // 123 這裡走的是第一個
console.log(f8("測試")); // 字元串 這裡走的是第二個

// 參數不同的形式,最後any要相容
function f9(a: number): number;
function f9(b: string, c: string): string;
function f9(str: any, d?: any): any {
  if (d) {
    return str + d;
  } else {
    return str;
  }
}
console.log(f9(1)); // 1 這裡走的是第一個
console.log(f9("測試", "字元")); // 測試字元 這裡走的是第二個
           

繼續閱讀