TypeScript 能手养成之旅 Day 13 特殊型别 - Never

前言

今天来讲解特殊型别中的 nevernever 是一种函式回传值的状况,跟 void 很像,稍後会来比较一下两者的差异。

Never 型别的意义

有两种情况会派上用场:

  1. 当函式或方法永远不回传值(例如:无穷回圈)。
  2. 出现例外状况导致程序无法继续执行。

如果今天有一个函式会有回传值,而中间我们有准备例外处理抛出来,我们就可以将这个函式回传值赋予 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 很聪明的推断 errorMessagenever

另外整理 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.

never v.s. void 的差异

void: 函式或方法不回传值的情况。
never: 函式没有任何结束点时,若没有注记,TypeScript 就会判断该函式回传值为 never。如果有注记回传值为 never,该函式就不会有结束点。

结语

这边简单复习一下:

  1. 当函式没有结束点时,TypeScript 会自动帮我们推断回传值为 never
  2. 有注记该函式回传值为 never 时,代表这函式不会有结束点。
  3. 如果回传值有其他型别可能,可以搭配 never 服用。
  4. 函式没有注记回传值型别,TypeScript 会根据 return 值的型别或函式回传值来进行型别推断。

never 是蛮特殊的型别,也有好玩的地方,大家可以多多尝试喔~


<<:  不要在 mutation 加工 API 回来的资料

>>:  EP15 - [TDD] 建立 Order 参数 (1/2)

[Python 爬虫这样学,一定是大拇指拉!] DAY07 - URL / URN / URI (3)

URI 之 URL 语法 URL 语法图: 图片来源 根据图片,我们可以知道所谓的 URL ,是由 ...

全端入门Day24_後端程序撰写之多一点点的Node.js

昨天介绍了一些名词,今天继续提Node.js Node.js一点入门 今天直接贴上程序码,再去做解释...

Day02 X 为什麽要在前端做效能优化?

大家好!虽然今天是 Day 2,不过严格来说是系列文的第一天。今天要来谈谈「为什麽我们需要在前端做...

繁体转换简体

最近想记录一下繁体转换简体,是因为网站或是在写blog的时候,未来会加入简体版,这样内容就可以迅速转...

[DAY 24]Embed功能

今天主要是来介绍一下文字嵌入(Embed)这功能 如果想要在讯息里使用mark down功能的话需要...