激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

香港云服务器
服務器之家 - 編程語言 - JavaScript - js教程 - 理解 TypeScript 的 Never 類型

理解 TypeScript 的 Never 類型

2022-02-25 22:09前端充電寶CUGGZ js教程

對于很多人來說,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)」時,會看到一個錯誤提示:

理解 TypeScript 的 Never 類型

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

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

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

原文地址:https://mp.weixin.qq.com/s/8rNKcxEXUmMGerAEGOlVCQ

延伸 · 閱讀

精彩推薦
  • js教程ES5和ES6中類的區別總結

    ES5和ES6中類的區別總結

    這篇文章主要給大家介紹了ES5和ES6中類的區別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    Totora612302021-12-16
  • js教程javascript實現圖片預加載和懶加載

    javascript實現圖片預加載和懶加載

    這篇文章主要為大家詳細介紹了javascript實現圖片預加載和懶加載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    啊a阿花8272022-02-16
  • js教程mustache.js實現首頁元件動態渲染的示例代碼

    mustache.js實現首頁元件動態渲染的示例代碼

    這篇文章主要介紹了mustache.js實現首頁元件動態渲染的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可...

    code2roc4262021-12-21
  • js教程js實現簡單放大鏡特效

    js實現簡單放大鏡特效

    這篇文章主要為大家詳細介紹了js實現簡單放大鏡特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一個21歲的老同志9612022-02-13
  • js教程js閉包和垃圾回收機制示例詳解

    js閉包和垃圾回收機制示例詳解

    這篇文章主要給大家介紹了關于js閉包和垃圾回收機制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    丶Serendipity丶8162022-01-24
  • js教程一篇文章看懂JavaScript中的回調

    一篇文章看懂JavaScript中的回調

    這篇文章主要給大家介紹了如何通過一篇文章看懂JavaScript中的回調,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    瘋狂的技術宅4842021-12-27
  • js教程在HTML中使用JavaScript的兩種方法

    在HTML中使用JavaScript的兩種方法

    這篇文章主要介紹了在HTML中使用JavaScript的兩種方法,幫助大家更好的理解和制作網頁,感興趣的朋友可以了解下...

    itbsl9522021-12-18
  • js教程javascript實現下拉菜單效果

    javascript實現下拉菜單效果

    這篇文章主要為大家詳細介紹了javascript實現下拉菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    愛前端的茂茂7342022-01-20
959
主站蜘蛛池模板: 国产女做a爱免费视频 | 久啪视频 | 一本免费视频 | 久草视频在线看 | 久久久国产精品网站 | 国产精品久久久久一区二区 | 在线观看欧美成人 | 久久久久久久久91 | 欧美成人高清视频 | 国产精品免费久久久 | free性欧美hd另类 | 91精品国产777在线观看 | 日产精品久久久一区二区福利 | 717影院理论午夜伦八戒秦先生 | 成人网视频 | 欧美日韩一 | 亚洲精品久久久久久久久久 | 亚洲性生活免费视频 | 亚洲免费视频大全 | 黄色毛片免费看 | 欧美精品99 | 爽爽淫人网 | 在线免费观看精品 | 新久草视频| 久久精品.com | 亚洲成人伊人 | 午夜丰满少妇高清毛片1000部 | 日本特级a一片免费观看 | 99久久电影 | 全网免费毛片 | 欧美精品电影一区 | 午夜视频在线免费观看 | 欧美日韩免费看 | 嗯~啊~弄嗯~啊h高潮视频 | 国产羞羞视频在线观看 | 亚洲视频在线观看免费视频 | 国产一级做a爱片在线看免 2019天天干夜夜操 | 久久久久免费精品国产小说色大师 | 毛片区| 91短视频网页版 | h网站在线观看 |