国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

理解 TypeScript 的 Never 類型

開發 前端
對于很多人來說,TypeScript 中的 never 類型比較神秘,它有什么作用?什么時候應該使用它?

今天我們就來深入討論 never 類型,并介紹可能遇到的情況。

1. never 的特點

TypeScript使用never關鍵字來表示邏輯上不應該發生的情況和控制流。實際上,我們在工作中不會常遇到使用 never 的情況,但是還是很有必要了解它是如何有助于 TypeScript 的類型安全的。

官方文檔對 never 的描述:

never 類型是任何類型的子類型,也可以賦值給任何類型;但是,沒有類型是never的子類型或可以賦值給never類型(never 本身除外)。

也就是說,可以將never類型的變量分配給任何其他變量,但不能將其他變量分配給never。下面來看一個例子:

const throwErrorFunc = () => { throw new Error("error") };
let neverVar: never = throwErrorFunc()
const myString = ""
const myInt:number = neverVar;
neverVar = myString // Type 'string' is not assignable to type 'never'

我們可以暫時忽略 throwErrorFunc 的功能,只需知道,這樣可以初始化類型為 never 的變量。

從上面的代碼中可以看到,可以將 never 類型的變量 neverVar 分配給 number 類型的變量myInt。但是,不能將 string 類型的 myString 變量分配給 neverVar,這樣分配會報錯。這也就是上面所說的,不能將任何其他類型的變量分配給 never,即使是 any 類型的變量。

2. 函數中的 never

TypeScript 使用 never 作為那些無法達到的終點的函數的返回值類型。主要有兩種情況:

函數拋出一個錯誤異常。

函數包含一個無限循環。

來看上面提到的 throwErrorFunc 函數,TypeScript 就會推斷此函數的返回類型為 never:

const throwErrorFunc = () => {
throw new Error("error")
};

另一種情況就是如果有一個一直為真的表達式產生了無限循環,它沒有中斷或者返回語句。TypeScript 就會推斷此函數的返回類型為 never:

const output = () => {
while (true) {
console.log("循環");
}
};

3. never 和 void 的區別

那什么是 void 類型呢?我們有 void 為什么還要 never 類型呢?

never 和 void 的主要區別在于,void 類型的值可以是 undefined 或 null。

TypeScript 對不返回任何內容的函數使用 void。如果沒有為函數指定返回類型,并且在代碼中沒有返回任何內容,TypeScript 將推斷其返回類型為void。在TypeScript中,不返回任何內容的 void 函數實際上返回的是 undefined。

來看一個例子:

const functionWithVoidReturnType = () => {}; 
console.log(functionWithVoidReturnType()); // undefined

這里,TypeScript 會推斷此函數的返回類型為 void。我們通常會忽略 void 函數的返回值。

這里需要注意:根據 never 類型的特征,我們不能將 void 指定給 never:

const myVoidFunction = () => {}
neverVar = myVoidFunction() // ERROR: Type 'never' is not assignable to type 'void'

4. never 作為可變類型守

如果變量被一個永遠不可能為 true 的類型保護縮小范圍,那么變量就可能成為 never類型。通常,這表明條件邏輯存在缺陷。

來看下面的例子:

const unExpectedResult = (myParam: "this" | "that") => {
if (myParam === "this") {

} else if (myParam === "that") {

} else {
console.log({ myParam })
}
}


在這個例子中,當函數執行到 console.log({ myParam }) 時,myParam 的類型將為 never。

這是因為我們將 myParam 的類型設置為了 this 或 that。由于 TypeScript 認為 myParam 類型屬于兩個類型之一,所以從邏輯上講,第三個 else 語句永遠不會出現。所以TypeScript 就會將參數類型設置為 never。

5. 詳盡檢查

在實踐中可能會用到 never 的一個地方就是進行詳細的檢查。這有助于確保我們處理了代碼中的每個邊緣情況。

下面來看看如何使用詳盡檢查為 switch 語句添加更好的類型安全性:

type Animal = "cat" | "dog" | "bird"

const shouldNotHappen = (animal: never) => {
throw new Error("error")
}

const myPicker = (pet: Animal) => {
switch(pet) {
case "cat": {
// ...
return
}
case "dog": {
// ...
return
}
}
return shouldNotHappen(pet)
}

當添加 「return shouldNotHappen(pet)」時,會看到一個錯誤提示:

這里的錯誤提示告訴我們,忘記包含在 switch 語句中的情況。這是一種獲得編譯時安全性并確保處理 switch 語句中的所有情況的巧妙模式。

6. 結論如你所見,TypeScript 中的 never 類型在特定情況很有用。大多數情況下,never 表明代碼存在缺陷。

但在某些情況下,例如詳盡檢查,它可以成為幫助編寫更安全的 TypeScript 代碼的好工具。


責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2022-11-30 07:17:53

2024-11-05 09:11:09

TypeScript開發者代碼

2021-07-27 06:06:34

TypeScript語言運算符

2024-11-11 08:32:00

2024-09-30 08:34:01

TypeScript可讀性安全性

2022-08-08 09:00:42

TypeScript映射類型

2021-08-18 07:56:05

Typescript類型本質

2024-05-11 10:19:31

TypeScript類型接口

2022-04-11 08:42:09

TypeScript子類型定義

2021-09-09 07:21:26

TypeScript 高級類型

2024-06-13 09:05:12

2022-04-18 20:12:03

TypeScript靜態類型JavaScrip

2023-03-28 09:56:47

TypeScripJavaScrip

2022-09-20 14:43:55

TypeScript類型體操

2025-01-20 00:13:19

TypeScript操作符數據類型

2021-06-09 07:55:19

Typescript類型檢查

2022-05-04 09:02:41

TypeScript類型工具

2022-03-24 09:44:54

TypeScriptSOLID

2009-08-27 16:39:26

C# String類型

2019-03-21 09:45:11

TypeScript編程語言Javascript
點贊
收藏

51CTO技術棧公眾號

国产又爽又黄的激情精品视频| 欧美激情视频网址| 成人在线免费在线观看| 欧美三级伦理在线| 日韩亚洲欧美成人一区| 超碰超碰97| 日本在线不卡视频一二三区| 26uuu久久噜噜噜噜| 在线观看涩涩| 欧美人与z0zoxxxx视频| 成年人视频在线网站| 成人免费视频caoporn| 久久99国产精品99久久| 羞羞色国产精品网站| 自拍偷拍免费精品| 免费大片在线观看www| 亚洲一区二区五区| 不卡影院一区二区| 在线观看污污视频| 国产乱子伦三级在线播放| 久久天堂av综合合色蜜桃网| 久久久久久九九九九| 成人久久久久| 国产91亚洲精品| 国产女人18毛片水真多18精品| 国产亚洲精品久久久久久牛牛| 亚洲奶水xxxx哺乳期| 欧美日韩免费观看一区三区| 永久在线免费观看| 亚洲成人免费视频| 一本免费视频| 一区二区三区四区在线免费观看| 日本欧美视频在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美v亚洲v综合ⅴ国产v| 欧美写真视频一区| 欧美激情在线观看视频免费| 超碰在线免费观看97| 99久久精品国产网站| 日韩影院免费视频| 国产成人免费观看| 欧美激情视频一区二区三区在线播放| 国产精品你懂得| 偷拍亚洲色图| 秋霞成人午夜鲁丝一区二区三区| 91蝌蚪精品视频| 97超碰色婷婷| 欧美综合视频| 久久国产精品无码网站| 日韩写真欧美这视频| 日本不卡影院| 亚洲精品久久久久| 波多野结衣久久精品| www.欧美三级电影.com| 香蕉大人久久国产成人av| 欧美激情久久久久久| 杨幂一区二区三区免费看视频| 国产精品第三页| 亚洲色图网站| 日韩高清专区| 国产一区二区三区四区五区美女 | 欲色天天网综合久久| 成人黄色免费网站| 欧美激情a在线| 国产aⅴ精品一区二区三区久久| 成人网在线免费观看| 中文一区在线| 亚洲精品蜜桃久久久久久| 久久久精品天堂| 美女永久在线网站| 91精品婷婷国产综合久久竹菊| 国产天堂在线播放视频| 在线播放日韩精品| 牛牛影视久久网| 99久久久久国产精品免费| 奇米精品一区二区三区四区| 亚洲熟妇av日韩熟妇在线| 亚洲日本青草视频在线怡红院 | 天天色综合4| 欧美日韩在线免费| 俺来也官网欧美久久精品| 久久亚洲精品网站| 久久在线免费| 亚洲国产一区二区精品视频| 国产欧美一区二区精品婷婷| 天堂91在线| 中文字幕国产精品久久| 日韩精品诱惑一区?区三区| 亚洲精品国产精品国自产观看| 欧美乱大交xxxxx另类电影| 在线中文字幕第一区| 欧美日韩大尺度| 亚洲精品国产一区二区三区四区在线| se在线电影| 自拍亚洲一区欧美另类| 热久久精品国产| 国产一区免费在线| 欧美91在线| 天天做天天摸天天爽国产一区| 毛片在线播放a| 久久色在线播放| 你懂的成人av| 91国在线高清视频| 一区二区三区免费网站| 精品无人国产偷自产在线| 天天爽人人爽夜夜爽| 91精品麻豆日日躁夜夜躁| 高清一区二区中文字幕| 波多野结衣久草一区| 91在线观看免费视频| 色影视在线观看| 91av视频在线| 国产成人精品免费看| 成人免费一区二区三区视频网站| 久久这里有精品| 久久午夜av| 亚洲男人天堂| 欧美大码xxxx| 久久99精品国产麻豆不卡| 男人久久精品| 欧美亚洲视频在线看网址| 国产乱理伦片在线观看夜一区| 四虎在线观看| 777午夜精品福利在线观看| 国内精品写真在线观看| 9色在线观看| 欧美一区二区三区免费观看| 国产精品一区二区男女羞羞无遮挡| 三级做a全过程在线观看| 欧美国产激情18| 国精产品一区一区三区mba桃花| 日本不卡免费播放| 欧美激情第1页| 国产成人综合亚洲网站| www在线免费观看视频| 亚洲综合自拍一区| 国产精品卡一卡二卡三| 国产成人精品一区二区三区在线 | 日韩av在线免费| 狠狠爱成人网| 992tv在线影院| 91国产精品91| xf在线a精品一区二区视频网站| 理论不卡电影大全神| 日本不卡一二三区| 欧美日韩另类一区| 91精品秘密在线观看| 有码av在线| 国产精品日韩在线一区| 亚洲另类色综合网站| 亚洲素人在线| 成人黄色影视| 国产精品高清在线| 亚洲最新在线观看| 清纯唯美日韩| 亚洲日本va中文字幕久久| 国产精品扒开腿做爽爽爽视频| 国产精品久久看| 久久99国产精品久久99大师| 15—17女人毛片| 日本国产一区二区三区| 一区二区视频免费在线观看| 亚洲精品无吗| 中文字幕中文字幕在线中文字幕三区 | 国产日本欧美视频| 一区二区三区.www| 成人毛片在线| 深夜福利视频一区| 国产精品视频免费观看| 欧美精品一卡两卡| 美女一区二区视频| 丁香婷婷久久| 99视频免费| 91理论片午午论夜理片久久| 色婷婷精品久久二区二区蜜臀av | 国产成人夜色高潮福利影视| 日本老熟妇毛茸茸| 国产91|九色| 精品久久久中文| 亚洲综合好骚| 亚洲精品一级二级| 天天激情综合| 国产精品xxxx| 国产亚洲精品久久久久动| 中文字幕不卡在线观看| 经典一区二区| 黄色av网站在线播放| 激情六月天婷婷| 国产91ⅴ在线精品免费观看| 91久久线看在观草草青青| 日韩成人精品在线| 精品一区二区三区中文字幕在线 | 中文字幕在线不卡一区二区三区 | 中文字幕第80页| 国产精品欧美亚洲777777| 欧美夫妻性生活| 久久综合狠狠综合久久激情 | 精品久久久噜噜噜噜久久图片| 国产精品91久久| 欧美三电影在线|