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("測試", "字元")); // 測試字元 這裡走的是第二個