日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeScript 的类型推导 Type Inference

發(fā)布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TypeScript 的类型推导 Type Inference 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

官方鏈接

在 TypeScript 中,當沒有顯式類型注釋時,有幾個地方使用類型推斷來提供類型信息。
比如 let a = 3;

a 被推導成 number 類型。

x 變量的類型被推斷為數(shù)字。 這種推斷發(fā)生在初始化變量和成員、設置參數(shù)默認值以及確定函數(shù)返回類型時。

在大多數(shù)情況下,類型推斷很簡單。 在以下部分中,我們將探討如何推斷類型的一些細微差別。

Best common type

當從多個表達式進行類型推斷時,這些表達式的類型用于計算“最佳公共類型”。

let x = [0, 1, null];let x: (number | null)[]

要推斷上例中 x 的類型,我們必須考慮每個數(shù)組元素的類型。 這里我們給出了數(shù)組類型的兩種選擇:數(shù)字和空值。 最佳通用類型算法會考慮每個候選類型,并選擇與所有其他候選類型兼容的類型。

因為必須從提供的候選類型中選擇最好的公共類型,所以在某些情況下類型共享一個公共結構,但沒有一種類型是所有候選類型的超類型。

let zoo = [new Rhino(), new Elephant(), new Snake()];let zoo: (Rhino | Elephant | Snake)[]

基于上下文的類型推導 - Contextual Typing

在 TypeScript 的某些情況下,類型推斷也適用于“另一個方向”。這被稱為“上下文類型”。當表達式的類型由其位置隱含時,就會發(fā)生上下文類型化。例如:

window.onmousedown = function (mouseEvent) {console.log(mouseEvent.button); //<- OKconsole.log(mouseEvent.kangaroo); //<- Error! };

在這里,TypeScript 類型檢查器使用 Window.onmousedown 函數(shù)的類型來推斷賦值右側的函數(shù)表達式的類型。 當它這樣做時,它能夠推斷 mouseEvent 參數(shù)的類型,該參數(shù)確實包含 button 屬性,但不包含 kangaroo 屬性。

TypeScript 足夠智能,可以推斷其他上下文中的類型:

window.onscroll = function (uiEvent) {console.log(uiEvent.button); //<- Error! };

基于上述函數(shù)被分配給 Window.onscroll 的事實,TypeScript 知道 uiEvent 是一個 UIEvent,而不是像前面的例子那樣的 MouseEvent。 UIEvent 對象不包含按鈕屬性,因此 TypeScript 會拋出錯誤。

如果此函數(shù)不在上下文類型位置,則該函數(shù)的參數(shù)將隱式具有類型 any,并且不會發(fā)出錯誤(除非您使用 --noImplicitAny 選項):

const handler = function (uiEvent) {console.log(uiEvent.button); //<- OK };

我們還可以顯式地為函數(shù)的參數(shù)提供類型信息以覆蓋任何上下文類型:

window.onscroll = function (uiEvent: any) {console.log(uiEvent.button); //<- Now, no error is given };

總結

以上是生活随笔為你收集整理的TypeScript 的类型推导 Type Inference的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。