今天來講解特殊型別中的 never
,never
是一種函式回傳值的狀況,跟 void
很像,稍後會來比較一下兩者的差異。
有兩種情況會派上用場:
如果今天有一個函式會有回傳值,而中間我們有準備例外處理拋出來,我們就可以將這個函式回傳值賦予 Never
型別,如下:
const transactionCheck = function orderStatusCheck(status: string): string | never {
if (status === 'cancel') {
errorMessage('something went wrong')
}
return 'seccess!'
}
function errorMessage(message: string): never {
throw new Error(message);
}
這邊 TypeScript 很聰明的推斷 errorMessage
是 never
。
另外整理 never
例子
// 有特別註記 never
function errorMessage(message: string): never {
throw new Error(message);
}
// 自動推論回傳的是 never
function failed() {
return errorMessage('errorMessage')
}
// getRandomFail 函式會有結束點(number 小於 2),回報錯誤
function getRandomFail(x: number): never{
let number = Math.floor(Math.random() * x) + 1
if (number < 2) {
failed()
}
} //Error: A function returning 'never' cannot have a reachable end point.
void
: 函式或方法不回傳值的情況。never
: 函式沒有任何結束點時,若沒有註記,TypeScript 就會判斷該函式回傳值為 never
。如果有註記回傳值為 never
,該函式就不會有結束點。
這邊簡單複習一下:
never
。never
時,代表這函式不會有結束點。never
服用。return
值的型別或函式回傳值來進行型別推斷。never
是蠻特殊的型別,也有好玩的地方,大家可以多多嘗試喔~