TypeScript 中的函數類型用于為函數定義參數類型和返回值類型。這提供了一個清晰的契約,指明函數應該如何被調用和期望返回什么類型的結果。以下是 TypeScript 中函數類型的一些基本用法和概念:
函數聲明
在 TypeScript 中,你可以為函數的參數和返回值指定類型:
function add(x: number, y: number): number {return x + y;
}
在這個例子中,x
和 y
都被指定為 number
類型,同時函數的返回類型也被定義為 number
。
函數表達式
你也可以在函數表達式中使用 TypeScript 的類型注解:
const add: (x: number, y: number) => number = function(x, y) {return x + y;
};
// 當函數作為表達式時,可以通過類似箭頭函數形式的語法來為函數添加類型
// 這種形式只適用于函數表達式
const add3: (a: number, b: number) => number = (a, b) => a + b
這里,add
的類型是一個函數類型,這意味著 add
是一個接受兩個 number
類型的參數并返回一個 number
類型的結果的函數。
箭頭函數
在 TypeScript 中,箭頭函數同樣可以使用類型注解:
const add: (x: number, y: number) => number = (x, y) => x + y;
這個例子和上面的函數表達式例子類似,但是采用了 ES6 的箭頭函數語法。
可選參數和默認參數
TypeScript 允許你指定函數參數為可選的,方法是在參數名后添加一個問號 ?
。同時,你也可以為參數提供默認值:
function buildName(firstName: string, lastName?: string): string {if (lastName)return firstName + " " + lastName;elsereturn firstName;
}const result = buildName("John"); // 正確,lastName 是可選的
在這個例子中,lastName
是一個可選參數。
剩余參數
你可以使用剩余參數收集多個參數值到一個變量中:
function buildName(firstName: string, ...restOfName: string[]): string {return firstName + " " + restOfName.join(" ");
}const employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
在這個例子中,...restOfName
表示剩余參數,它們被收集到一個名為 restOfName
的數組中。
函數重載
TypeScript 允許函數重載,意味著你可以為同一個函數提供多個函數類型定義:
function pickCard(x: {suit: string; card: number; }[]): number;
function pickCard(x: number): {suit: string; card: number; };
function pickCard(x): any {// 實現函數體
}
在這個例子中,pickCard
函數有兩個重載:一個接收對象數組,另一個接收數字。根據調用方式的不同,函數返回不同類型的值。
void類型
函數沒有返回值,則該類型為void
function sayHello(): void {console.log("hello")
}const sayHello2: () => void = () => {console.log("hello2")
}
通過這些示例,你可以看到 TypeScript 中的函數類型是如何提供額外的類型安全性和文檔信息的,有助于提高代碼的可讀性和可維護性。