亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TypeScript中unknown和any的區別有哪些

發布時間:2021-10-27 11:33:50 來源:億速云 閱讀:162 作者:iii 欄目:web開發

這篇文章主要介紹“TypeScript中unknown和any的區別有哪些”,在日常操作中,相信很多人在TypeScript中unknown和any的區別有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”TypeScript中unknown和any的區別有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

TypeScript中unknown和any的區別有哪些

我們知道 any 類型的變量可以被賦給任何值。

let myVar: any = 0;
myVar = '1';
myVar = false;

TypeScript 指南并不鼓勵使用 any,因為使用它就會丟掉類型限制--而需要類型限制也是我們選擇 TypeScript 的一個原因,所以就是有點背道而馳。

TypeScript(3.0 及以上版本)還提供了一種類似于 any 的特殊類型 unknown。 我們也可以為 unknown 類型變量分配任何值:

let myVar: unknown = 0;
myVar = '1';
myVar = false;

那現在就有一個問題了, anyunknown 有啥區別?

1. unknown vs any

為了更好地理解 unknownany 之間的區別,我們先從編寫一個想要調用其唯一參數的函數開始。

我們將 invokeAnything() 的唯一參數設置為 any 類型

function invokeAnything(callback: any) {
  callback();
}

invokeAnything(1); // throws "TypeError: callback is not a function"

因為 callback 參數是任何類型的,所以語句 callback() 不會觸發類型錯誤。我們可以用any 類型的變量做任何事情。

但是運行會拋出一個運行時錯誤:TypeError: callback is not a function1 是一個數字,不能作為函數調用,TypeScript并沒有保護代碼避免這個錯誤

那既允許 invokeAnything() 函數接受任何類型的參數,又要強制對該參數進行類型檢查防止上面這種報錯,要怎么做呢?

有請 unknown 大哥來控場。

any 一樣,unknown 變量接受任何值。但是當嘗試使用 unknown 變量時,TypeScript 會強制執行類型檢查。這不就是我們想要的嘛。

function invokeAnything(callback: unknown) {
  callback();
  // Object is of type 'unknown'
}

invokeAnything(1);

因為 callback 參數的類型是 unknown,所以語句 callback() 有一個類型錯誤 :Object is of type 'unknown'。 與 any 相反,TypeScript會保護我們不調用可能不是函數的東西。

在使用一個 unknown 類型的變量之前,你需要進行類型檢查。在這個例子中,我們只需要檢查callback 是否是一個函數類型。

function invokeAnything(callback: unknown) {
  if (typeof callback === 'function') {
    callback();
  }
}

invokeAnything(1);

2. unknown 和 any 的心智模式

說實話,當我學習的時候,我很難理解 unknown 。它與 any 有什么不同,因為這兩種類型都接受任何值

下面是幫助我理解兩者區別的規則:

  • 可以將任何東西賦給 unknown 類型,但在進行類型檢查或類型斷言之前,不能對 unknown 進行操作

  • 可以把任何東西分配給any類型,也可以對any類型進行任何操作

上面的例子正好說明了 unknown 和 `any 之間的相似和不同。

unknown 示例:

function invokeAnything(callback: unknown) {
  // 可以將任何東西賦給 `unknown` 類型,
  // 但在進行類型檢查或類型斷言之前,不能對 `unknown` 進行操作
  if (typeof callback === 'function') {
    callback();
  }
}

invokeAnything(1); // You can assign anything to `unknown` type

類型檢查 typeof callback === 'function',檢查 callback 是否為函數,如果是,則可以調用。

any 示例:

function invokeAnything(callback: any) {
  // 可以對 `any` 類型執行任何操作
  callback();
}

invokeAnything(1); // 可以把任何東西分配給`any`類型

如果 callbackany, TypeScript 就不會強制 callback() 語句進行任何類型檢查。

到此,關于“TypeScript中unknown和any的區別有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五峰| 泊头市| 峨边| 灵武市| 南木林县| 日照市| 河池市| 道真| 元谋县| 峨边| 府谷县| 秦安县| 日喀则市| 莱西市| 女性| 盐亭县| 永宁县| 莱芜市| 达孜县| 通化市| 高安市| 罗田县| 塔城市| 搜索| 嘉荫县| 洪湖市| 苍溪县| 鲜城| 鄂托克旗| 峡江县| 富阳市| 万年县| 高青县| 石狮市| 辽宁省| 福鼎市| 永清县| 清镇市| 定远县| 安西县| 涟源市|