真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

TypeScript中unknown和any的區(qū)別有哪些

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

永年網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

TypeScript中unknown和any的區(qū)別有哪些

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

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

TypeScript指南并不鼓勵(lì)使用 any,因?yàn)槭褂盟蜁?huì)丟掉類型限制--而需要類型限制也是我們選擇 TypeScript 的一個(gè)原因,所以就是有點(diǎn)背道而馳。

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

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

那現(xiàn)在就有一個(gè)問題了, anyunknown 有啥區(qū)別?

1. unknown vs any

為了更好地理解 unknownany 之間的區(qū)別,我們先從編寫一個(gè)想要調(diào)用其唯一參數(shù)的函數(shù)開始。

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

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

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

因?yàn)?callback 參數(shù)是任何類型的,所以語句 callback() 不會(huì)觸發(fā)類型錯(cuò)誤。我們可以用any 類型的變量做任何事情。

但是運(yùn)行會(huì)拋出一個(gè)運(yùn)行時(shí)錯(cuò)誤:TypeError: callback is not a function。1 是一個(gè)數(shù)字,不能作為函數(shù)調(diào)用,TypeScript并沒有保護(hù)代碼避免這個(gè)錯(cuò)誤

那既允許 invokeAnything() 函數(shù)接受任何類型的參數(shù),又要強(qiáng)制對該參數(shù)進(jìn)行類型檢查防止上面這種報(bào)錯(cuò),要怎么做呢?

有請 unknown 大哥來控場。

any 一樣,unknown 變量接受任何值。但是當(dāng)嘗試使用 unknown 變量時(shí),TypeScript 會(huì)強(qiáng)制執(zhí)行類型檢查。這不就是我們想要的嘛。

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

invokeAnything(1);

因?yàn)?callback 參數(shù)的類型是 unknown,所以語句 callback() 有一個(gè)類型錯(cuò)誤 :Object is of type 'unknown'。 與 any 相反,TypeScript會(huì)保護(hù)我們不調(diào)用可能不是函數(shù)的東西。

在使用一個(gè) unknown 類型的變量之前,你需要進(jìn)行類型檢查。在這個(gè)例子中,我們只需要檢查callback 是否是一個(gè)函數(shù)類型。

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

invokeAnything(1);

2. unknown 和 any 的心智模式

說實(shí)話,當(dāng)我學(xué)習(xí)的時(shí)候,我很難理解 unknown 。它與 any 有什么不同,因?yàn)檫@兩種類型都接受任何值

下面是幫助我理解兩者區(qū)別的規(guī)則:

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

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

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

unknown 示例:

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

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

類型檢查 typeof callback === 'function',檢查 callback 是否為函數(shù),如果是,則可以調(diào)用。

any 示例:

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

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

如果 callbackany, TypeScript 就不會(huì)強(qiáng)制 callback() 語句進(jìn)行任何類型檢查。

到此,關(guān)于“TypeScript中unknown和any的區(qū)別有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


新聞標(biāo)題:TypeScript中unknown和any的區(qū)別有哪些
文章出自:http://weahome.cn/article/igoods.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部