Skip to content

建立 2026-09-15 更新 2026-09-15

函式

函式是 TypeScript 型別檢查最常發揮作用的地方:只要參數與回傳值標好型別,呼叫端打錯型別、少傳參數,編輯器立刻就會提醒。

參數與回傳型別

function add(a: number, b: number): number {
  return a + b
}

const multiply = (a: number, b: number): number => a * b

回傳型別通常可以省略、讓 TypeScript 自動推論;但公開的函式(例如給其他模組呼叫的 API)建議明確標出回傳型別,讓介面更清楚,也避免函式內部改動時不小心變更回傳型別而沒發現。

可選參數與預設值

function createUser(name: string, age?: number) {
  return { name, age: age ?? 18 }
}

function greet(name: string, greeting: string = "Hello") {
  return `${greeting}, ${name}!`
}

createUser("Alice")          // OK,age 是 undefined
createUser("Bob", 30)        // OK
greet("Carol")                // "Hello, Carol!"

? 表示參數可省略,型別會自動變成「原型別 | undefined」;有預設值的參數等於自帶可選,呼叫時不傳就用預設值。可選與有預設值的參數必須放在必要參數後面,這點跟一般 JavaScript 函式一致。

其餘參數(Rest Parameters)

function sum(...nums: number[]): number {
  return nums.reduce((total, n) => total + n, 0)
}

sum(1, 2, 3)       // 6
sum(1, 2, 3, 4, 5) // 15

...nums: number[] 把多出來的參數收成一個陣列,型別跟一般陣列標法相同。

函式型別(把函式簽章當型別用)

type MathOp = (a: number, b: number) => number

const subtract: MathOp = (a, b) => a - b

先定義函式的「形狀」(參數與回傳型別),再讓變數套用這個型別;套用之後,subtract 的參數 ab 就不用再重複標型別,TypeScript 會從 MathOp 推回去。這個寫法在寫 callback、事件處理函式時很常見。

相關影音

Programming with Mosh 這支入門課用不少篇幅講函式參數與型別標註,適合看完本頁後找例子對照。