詳細(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)文章
js實(shí)現(xiàn)固定顯示區(qū)域內(nèi)自動(dòng)縮放圖片的方法
這篇文章主要介紹了js實(shí)現(xiàn)固定顯示區(qū)域內(nèi)自動(dòng)縮放圖片的方法,實(shí)例分析了javascript操作頁面元素及屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
Webpack打包c(diǎn)ss后z-index被重新計(jì)算的解決方法
這篇文章主要跟大家分享了Webpack打包c(diǎn)ss后z-index被重新計(jì)算的解決方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-06-06
JavaScript樹形菜單功能實(shí)現(xiàn)方法總結(jié)
樹形菜單是前端開發(fā)中常見的交互組件,用于展示具有層級(jí)關(guān)系的數(shù)據(jù)(如文件目錄、分類列表、組織架構(gòu)等),這篇文章主要介紹了JavaScript樹形菜單功能實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2025-08-08
一文帶你掌握J(rèn)avaScript異步編程的五種方式
異步可以理解為把一個(gè)任務(wù)分成了兩段,先執(zhí)行第一段,轉(zhuǎn)而去執(zhí)行其它任務(wù),等準(zhǔn)備完畢后,再回過頭來執(zhí)行第二段, 本文主要來和大家聊聊JavaScript異步編程的五種方式,感興趣的可以了解下2025-07-07
Firefox/Chrome/Safari的中可直接使用$/$$函數(shù)進(jìn)行調(diào)試
偶然發(fā)現(xiàn)的,頁面中沒有引入Prototype和jQuery。控制臺(tái)中敲$卻發(fā)現(xiàn)是一個(gè)函數(shù)。又試著敲$$,也是個(gè)function2012-02-02

