詳細(xì)聊聊TypeScript中any unknown never和void的區(qū)別
一 unknown: 未知類型
unknown: 未知類型是typescript 3.0 中引入的新類型。
1.1 所有類型的字面量都可以分配給unknown類型
unknown未知類型,代表變量類型未知,也就是可能為任意類型,所以, 所有類型的字面量都可以分配給unknown類型。
這里聲明一個(gè)unknown的變量,先后為其賦值字符串、數(shù)字和對(duì)象類型的字面量取值,都可以成功賦值。
let notSure: unknown = 'sisterAn!' // 可以被賦值任意類型 notSure = 'sisterAn!' notSure = 512 notSure = { hello: () => 'Hello sisterAn!' }
1.2 unknown 類型不允許給 any 或 unknown 以外的變量賦值
unknown 未知變量,既然類型未知,也就無法賦值給具體的某個(gè)類型,unknown 未知變量不允許給 any 或 unknown 以外的變量賦值。
兩個(gè)未知變量之間可以相互賦值
let notSure: unknown = 2 let notSure1: unknown = 'Hello' notSure = notSure1
未知變量和any變量可以相互賦值
let notSure: unknown = 2 let any1: any = 12 notSure = any1 any1 = notSure
未知變量不可以為其他變量賦值
let notSure: unknown = 2 let num: number = 12 notSure = num any1 = notSure num = notSure // error: Type 'unknown' is not assignable to type 'number'.
1.3 unknown 類型變量不可以執(zhí)行具體類型的方法
unknown 類型變量不可以執(zhí)行具體類型的方法,即使它真的是這個(gè)類型,除非你使用斷言。
let notSure: unknown = 'sisterAn' let num: number = 12 notSure = num notSure.toLowerCase() // error: Object is of type 'unknown'.
二 never:永不存在的值
never類型表示的是那些永不存在的值的類型。
2.1 never:執(zhí)行中斷的函數(shù)返回值類型
never通常用來指由于種種原因,函數(shù)沒有執(zhí)行到最后,導(dǎo)致不存在返回值的返回值類型。
示例一:拋出異常會(huì)直接中斷程序運(yùn)行,這樣程序就運(yùn)行不到返回值那一步了,即具有不可達(dá)的終點(diǎn),也就永不存在返回了
function error(msg: string): never { throw new Error(msg); }
示例二:死循環(huán),同樣程序永遠(yuǎn)無法運(yùn)行到函數(shù)返回值那一步,即永不存在返回。
function loopForever(): never { while (true) {}; }
2.2 never可以賦值給任何類型,但是不能被賦值
never類型是任何類型的子類型,也可以賦值給任何類型;然而,沒有類型是never的子類型或可以賦值給never類型(除了never本身之外)。 即使 any也不可以賦值給never。
三 void:函數(shù)無返回值
函數(shù)則無返回值或者返回 undefined。
function a(): number { // ERROR: 其聲明類型不為 "void" 或 "any" 的函數(shù)必須返回值 console.log(123) }
function a(): void { console.log(123) }
你只能為它賦予undefined和null。
let a: void = 1 // ERROR: 不能將類型“number”分配給類型“void” let a: void = undefined
四 any:在編譯時(shí)可選擇地包含或移除類型檢查
any實(shí)際上是跳過類型檢查的過程,所以允許你給它賦任意值,也可以調(diào)用任意的方法。相比較來說,Object類型的變量只是允許你給它賦任意值 - 但是卻不能夠在它上面調(diào)用任意的方法。
到此這篇關(guān)于詳細(xì)聊聊TypeScript中any unknown never和void的區(qū)別的文章就介紹到這了,更多相關(guān)ypeScript中any unknown never和void區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jquery實(shí)現(xiàn)右側(cè)欄菜單選擇操作
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)右側(cè)欄菜單選擇操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03JavaScript函數(shù)的特性與應(yīng)用實(shí)踐深入詳解
這篇文章主要介紹了JavaScript函數(shù)的特性與應(yīng)用實(shí)踐,結(jié)合實(shí)例形式較為深入的分析了javascript函數(shù)相關(guān)概念、特性、用法及操作注意事項(xiàng),需要的朋友可以參考下2018-12-12JS插件clipboard.js實(shí)現(xiàn)一鍵復(fù)制粘貼功能
這篇文章主要介紹了JS插件clipboard.js實(shí)現(xiàn)一鍵復(fù)制粘貼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08跟我學(xué)習(xí)javascript的基本類型和引用類型
跟我學(xué)習(xí)javascript的基本類型和引用類型,利用圖解的方式,告訴大家javascript的基本類型和引用類型的區(qū)別和聯(lián)系,感興趣的小伙伴們可以參考一下2015-11-11json對(duì)象和formData相互轉(zhuǎn)換的方式詳解
我們有兩種常見的傳參方式: JSON 對(duì)象格式和 formData 格式,但是一些場景是需要我們對(duì)這兩種數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換的,這篇文章主要介紹了json對(duì)象和formData相互轉(zhuǎn)換的方式詳解,需要的朋友可以參考下2023-02-02