iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Modern Web

TypeScript 魔法 - 喚醒你的程式碼靈感系列 第 16

Day16 - TypeScript 的黑洞 - 絕不(never)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20231001/20152047bna9rdzFWR.png

什麼是 never 型別?

在 TypeScript 中,never 型別表示那些永遠不會發生的值的型別。它通常用於表示某些程式碼路徑會導致錯誤或永遠不會正確執行的情況。換句話說,never 型別表示某些事情永遠不會發生。這個型別在某些情況下非常有用,因為它可以幫助我們更好地檢測潛在的錯誤。

never 型別的主要用途

函式永遠不會返回值

一個常見的 never 型別的用法是在函式中,當我們確定該函式永遠不會返回值時,可以將其標記為 never 型別。

舉例:

function generateError(message: string, code: number): never {
  throw { message: message, errorCode: code };
}

generateError('伺服器發生錯誤', 500);

https://ithelp.ithome.com.tw/upload/images/20231001/20152047JB7QjlycZK.png
在上方例子中,generateError 函式會拋出一個錯誤,並且永遠不會返回值。因此,它的返回型別是 never

無限循環

另一個 never 型別的常見應用是表示無限循環,永遠不會結束的循環。

舉例:

function infiniteLoop() {
  while (true) {
    console.log('無限循環的世界...'); // ∞ 無限循環的世界...
  }
}

infiniteLoop(); 

infiniteLoop 函式將永遠執行,並且不會返回任何值。

判斷式中的不可能情況

有時候,在程式碼中,我們知道某些情況永遠不會發生。在這種情況下,我們可以使用 never 型別來告訴 TypeScript 這個情況是不可能的。

舉例:

type Scenario = string | number;

function impossibleScenario(value: Scenario): never {
  if (typeof value === 'string') {
    throw new Error(`意外的字串值: ${value}`);
  } else if (typeof value === 'number') {
    throw new Error(`意外的數字值: ${value}`);
  } else {
    throw new Error(`未知型別的意外值: ${value}`);
  }
}

impossibleScenario('肉鬆');

https://ithelp.ithome.com.tw/upload/images/20231001/20152047ahDE6x2fVv.png

本日重點

  1. never 型別表示值不存在的特殊型別。
  2. 函式可以宣告返回 never 型別,表示永遠不會正常返回,通常用無限循環或拋出錯誤實現。
  3. never 可以分配給其他型別,但反過來則不成立,用於強制指定不正常返回的情況。

參考


上一篇
Day15 - 解決捉摸不定的資料 - 未知(unknown)
下一篇
Day17 - 相信我,我知道這個值的型別是什麼 - 型別斷言(Type Assertions)
系列文
TypeScript 魔法 - 喚醒你的程式碼靈感30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言