TypeScript 的类型推导 Type Inference
官方鏈接
在 TypeScript 中,當沒有顯式類型注釋時,有幾個地方使用類型推斷來提供類型信息。
比如 let a = 3;
a 被推導成 number 類型。
x 變量的類型被推斷為數字。 這種推斷發生在初始化變量和成員、設置參數默認值以及確定函數返回類型時。
在大多數情況下,類型推斷很簡單。 在以下部分中,我們將探討如何推斷類型的一些細微差別。
Best common type
當從多個表達式進行類型推斷時,這些表達式的類型用于計算“最佳公共類型”。
let x = [0, 1, null];let x: (number | null)[]要推斷上例中 x 的類型,我們必須考慮每個數組元素的類型。 這里我們給出了數組類型的兩種選擇:數字和空值。 最佳通用類型算法會考慮每個候選類型,并選擇與所有其他候選類型兼容的類型。
因為必須從提供的候選類型中選擇最好的公共類型,所以在某些情況下類型共享一個公共結構,但沒有一種類型是所有候選類型的超類型。
let zoo = [new Rhino(), new Elephant(), new Snake()];let zoo: (Rhino | Elephant | Snake)[]基于上下文的類型推導 - Contextual Typing
在 TypeScript 的某些情況下,類型推斷也適用于“另一個方向”。這被稱為“上下文類型”。當表達式的類型由其位置隱含時,就會發生上下文類型化。例如:
window.onmousedown = function (mouseEvent) {console.log(mouseEvent.button); //<- OKconsole.log(mouseEvent.kangaroo); //<- Error! };在這里,TypeScript 類型檢查器使用 Window.onmousedown 函數的類型來推斷賦值右側的函數表達式的類型。 當它這樣做時,它能夠推斷 mouseEvent 參數的類型,該參數確實包含 button 屬性,但不包含 kangaroo 屬性。
TypeScript 足夠智能,可以推斷其他上下文中的類型:
window.onscroll = function (uiEvent) {console.log(uiEvent.button); //<- Error! };基于上述函數被分配給 Window.onscroll 的事實,TypeScript 知道 uiEvent 是一個 UIEvent,而不是像前面的例子那樣的 MouseEvent。 UIEvent 對象不包含按鈕屬性,因此 TypeScript 會拋出錯誤。
如果此函數不在上下文類型位置,則該函數的參數將隱式具有類型 any,并且不會發出錯誤(除非您使用 --noImplicitAny 選項):
const handler = function (uiEvent) {console.log(uiEvent.button); //<- OK };我們還可以顯式地為函數的參數提供類型信息以覆蓋任何上下文類型:
window.onscroll = function (uiEvent: any) {console.log(uiEvent.button); //<- Now, no error is given };總結
以上是生活随笔為你收集整理的TypeScript 的类型推导 Type Inference的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s12巨魔大乱斗出什么装备 2022巨魔
- 下一篇: 宝可梦剑盾爆焰龟兽怎么抓?百分百抓爆焰龟