iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
JavaScript

用 TypeScript 重新定義前端開發:30 天的實踐與思考系列 第 7

Day07:TypeScript 的函式型別(Function Types and Parameters)

  • 分享至 

  • xImage
  •  

函式型別與參數 (Function Types and Parameters)

在 TypeScript 中,函式的定義與 JavaScript 非常類似,可以用 function 關鍵字來宣告函式,同時我們可以為參數和回傳值指定明確的型別,以確保程式的健全性:

// 基本函式宣告與型別註記
function functionName(parameter: type, parameter: type): returnType {
   // return something
}

// 範例:加法函式
function sum(x: number, y: number): number {
    return x + y;
}

當我們呼叫 sum 函式時,如果傳入的參數型別不符 TypeScript 的定義,編譯器會給出錯誤提示:

// 正確的型別
console.log(sum(1, 1)); // 2

// 錯誤的型別
console.log(sum("3", 1)); // error: Argument of type 'string' is not assignable to parameter of type 'number'

如果我們定義的函式不需要回傳任何值,則可以使用 void 型別。這樣可以明確表示函式內部沒有回傳值,並阻止呼叫方試圖將函式結果指派給變數:

// 不回傳任何值的函式
function print(name: string): void {
    console.log(name);
}

有時我們可能會忽略函式的回傳值型別註記,例如:

// 沒有明確指定回傳型別
function sum(x: number, y: number) {
    return x + y;
}

在這種情況下,TypeScript 會根據函式的邏輯自動推斷回傳型別。在這個例子中,編譯器會推斷出回傳型別是 number。然而,如果函式內部有不同的回傳邏輯,回傳的型別可能會被推斷為 union 型別,甚至是 any 型別。因此,為了程式的可讀性與維護性,盡量為每個函式加上明確的型別註記是個良好的習慣。

更多函式型別應用

TypeScript 也支援使用箭頭函式語法來簡化函式的定義,同時保留型別註記:

// 使用箭頭函式
const multiply = (x: number, y: number): number => {
    return x * y;
}

此外,我們可以定義可選參數與預設參數。可選參數使用 ? 來表示,而預設參數可以直接在參數後面賦值:

// 可選參數
function greet(name: string, greeting?: string): string {
    return `${greeting || 'Hello'}, ${name}`;
}

// 預設參數
function greetWithDefault(name: string, greeting: string = 'Hello'): string {
    return `${greeting}, ${name}`;
}

console.log(greet('Annie')); // "Hello, Annie"
console.log(greet('Annie', 'Hi')); // "Hi, Annie"
console.log(greetWithDefault('Tina')); // "Hello, Tina"

當處理函式型別時,我們也可以定義具有多個參數和回傳型別的函式型別。這樣可以用來更靈活地管理函式,尤其是在建立複雜的應用程式時:

// 函式型別宣告
type MathOperation = (a: number, b: number) => number;

// 使用函式型別
const add: MathOperation = (a, b) => a + b;
const subtract: MathOperation = (a, b) => a - b;

console.log(add(6, 4)); // 10
console.log(subtract(7, 3)); // 4

結語

函式型別在 TypeScript 中是一個強大的工具,它不僅能提供更強的型別安全性,還能提高程式的可讀性與可維護性。通過合理的型別註記與應用,我們可以撰寫出更加健壯且易於理解的程式碼。無論是傳統的函式定義、箭頭函式還是進階的函式型別,都能讓我們的程式設計更加靈活和高效。


上一篇
Day06:TypeScript 的擴充型別
下一篇
Day08:TypeScript 的特殊型別
系列文
用 TypeScript 重新定義前端開發:30 天的實踐與思考30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言