我已閱讀this,但不清楚'never'和'void'之間的區別是什麼?打字稿中never和void的區別是什麼?
20
A
回答
11
在命令式語言中,void
可以被認爲是包含單個值的類型。這些語言不提供構建或使用此值的方法,但void
函數可以被認爲是返回這個微不足道的值。
與此相反never
是一個不包含值的類型,這意味着具有此返回類型的函數根本無法正常返回。這意味着要麼拋出異常,要麼終止。
15
爲了增加李的非常好的答案,另一種想法是,在正確類型的程序中,可以觀察到never
值不可以。
除了永不返回(或總是拋出異常)的功能,你會看到當一個聯合類型已經用盡了所有可能成分的never
類型:
// Example assumes --strictNullChecks
function fn(x: number | string) {
if (typeof x === 'number') {
// x: number in this block
} else if (typeof x === 'string') {
// x: string in this block
} else {
// x: never in this block
// this block does not run; the value of x cannot be observed
}
}
3
此外,對於更多一個理論原因,與--strictNullChecks
新標誌,TypeScript需要一個新的底部類型(因爲null
和undefined
不再)。類型never
是這樣一個底部類型,並使TypeScript的類型系統更加一致。
2
返回類型Promise.reject()
是Promise<never>
,意思是「它永遠不會被解決」。
所以如果函數返回Promise<never>
,我認爲它只會返回錯誤。另一方面,Promise<void>
可能無價值地解決。
相關問題
- 1. 「void function()」和「void * function()」有什麼區別?
- 2. void *和void **有什麼區別?
- 3. (void **)&x和(void *)x有什麼區別?
- 4. void(int)和void(*)(int)有什麼區別?
- 5. 打字稿區別
- 6. 從「typedef void VOID」中內置「void」和「VOID」有什麼區別?
- 7. 「virtual void IBase :: Foo」和「virtual void Foo」之間的區別是什麼?
- 8. 打字稿與巴別塔有什麼重大區別?
- 9. C中的void和static void函數有什麼區別?
- 10. 什麼是打字稿
- 11. 什麼是打字稿?
- 12. 打字稿中兩個代碼有什麼區別?
- 13. 什麼是打字稿中的...語法
- 14. 靜態內聯void和void之間有什麼區別?
- 15. new Thread(void Target())和new Thread(new ThreadStart(void Target()))有什麼區別?
- 16. 什麼是類型的打字稿
- 17. void,eval和JavaScript中的Function構造函數有什麼區別?
- 18. 打字稿中的Option和[x:string]是什麼?
- 19. 打字稿不知道FORMDATA是什麼
- 20. 什麼是打字稿再出口?
- 21. 什麼是在打字稿編程?
- 22. 角2 - 什麼是window.print在打字稿
- 23. 什麼是打字稿`--lib`庫文件?
- 24. 這是什麼打字稿語法?
- 25. void __iomem *和void * __iomem之間的區別?
- 26. void(* xmlHashScanner)和void * xmlHashScanner之間的區別
- 27. 爲什麼打字稿
- 28. 更安全的打字稿 - 什麼是正常的打字稿的差異
- 29. 地區打字稿
- 30. imageview屬性和 - (void)setImage:forState:在UIButton中有什麼區別?
似乎並非如此。請參閱http://stackoverflow.com/questions/41291341/typescript-generics-void-never-or-undefined – unional