iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

TypeScript 能手養成之旅系列 第 7

TypeScript 能手養成之旅 Day 7 物件型別-函式型別

前言

前一篇我們介紹了基礎物件型別,今天要來介紹同樣是物件型別之一的函式型別,讓我繼續探索 TypeScript,Go~

函式的型別推論與註記

在一開始我們有個 askAge 的函示,將會回傳一個字串,我們要來一一完成 TypeScript 的要求。

首先定義好函式,很快的,就得到了 TypeScript 的型別推論了。

let askAge = (name, age) => {
  return `${name} is ${age} years old.`
}

let ageQuestion = askAge('CY', 28)

註記參數後

let askAge = (name: string, age: number) => {
  return `${name} is ${age} years old.`
}

let ageQuestion = askAge('CY', 28)

將參數註記上型別後,看來一切就正常了,但是接下來我們要更完整使用 TypeScript,因此我們要在輸出的變數 ageQuestion 上也加上型別,這樣我們可以更安心使用。

let askAge = (name: string, age: number): string => {
  return `${name} is ${age} years old.`
}

let ageQuestion: string = askAge('CY', 28)

狀況一 : 當參數型別錯誤時,會發生的問題

let askAge = (name: string, age: number):string => {
  return `${name} is ${age} years old.`
}

// 將 28 從 number 改為 string 時,噴錯了
let ageQuestion: string = askAge('CY', '28')

TypeScript 會進一步提醒我們,參數型別錯誤。

狀況二 : 當沒有回傳值時,會發生的問題

let askAge = (name: string, age: number) => {
  // 沒有回傳值
  `${name} is ${age} years old.`
}

let ageQuestion: string = askAge('CY', 28)

如果需要回傳值,必須乖乖的把 return 加上去 。

不需回傳值時,使用 void

let askAge = (name: string, age: number): void => {
  `${name} is ${age} years old.`
}

不推薦的用法 - any

let askAge = (name: any, age: any): any => {
  return `${name} is ${age} years old.`
}

let ageQuestion: any = askAge('CY', 28)

如果使用 any 註記,這樣使用 TypeScript 就失去了使用它的意義了。

結語

今天探討了函式的型別推論與註記,除了參數要定義型別以外,還有記得要定義是否要回傳值,要的話會是什麼型別,明天讓我們繼續往下探索吧!


上一篇
TypeScript 能手養成之旅 Day 6 物件型別-基礎物件型別
下一篇
TypeScript 能手養成之旅 Day 8 物件型別-擴充型別-元組(Tuple)
系列文
TypeScript 能手養成之旅16

尚未有邦友留言

立即登入留言