国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型

這篇具有很好參考價(jià)值的文章主要介紹了前端TypeScript學(xué)習(xí)day04-交叉類型與泛型。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

(創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動(dòng)力,如果看完對你有幫助,請留下您的足跡)

? ? ? ? ??前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

目錄

交叉類型

泛型

創(chuàng)建泛型函數(shù)

調(diào)用泛型函數(shù):

簡化調(diào)用泛型函數(shù):

泛型約束?

指定更加具體的類型

添加約束?

泛型接口?

泛型類

泛型工具類型?

Partial?

Readonly?

Pick?,>

Record?,>


交叉類型

交叉類型 & ):功能類似于接口繼承(extends), 用于組合多個(gè)類型為一個(gè)類型 常用于對象類型 )。
比如
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
解釋:使用交叉類型后,新的類型 PersonDetail 就 同時(shí)具備 了 Person 和 Contact 的所有屬性類型。
相當(dāng)于,
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
交叉類型(&)和接口繼承(extends)的對比:
???????? 相同點(diǎn):都可以實(shí)現(xiàn)對象類型的組合。
???????? 不同點(diǎn):兩種方式實(shí)現(xiàn)類型組合時(shí),對于同名屬性之間, 處理類型沖突的方式不同 。

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

說明:以上代碼,接口繼承會(huì)報(bào)錯(cuò)(類型不兼容);交叉類型沒有錯(cuò)誤,可以簡單的理解為: 前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

泛型

泛型 是可以在 保證類型安全 前提下,讓函數(shù)等 與多種類型一起工作 ,從而 實(shí)現(xiàn)復(fù)用 ,常用于: 函數(shù) 接口 、 class 中。
需求:創(chuàng)建一個(gè) id 函數(shù),傳入什么數(shù)據(jù)就返回該數(shù)據(jù)本身(也就是說,參數(shù)和返回值類型相同)。
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
比如,id(10) 調(diào)用以上函數(shù)就會(huì)直接返回 10 本身。但是,該函數(shù)只接收數(shù)值類型,無法用于其他類型。
為了能讓函數(shù)能夠接受任意類型,可以將參數(shù)類型修改為 any。但是,這樣就失去了 TS 的類型保護(hù),類型不安全。
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
泛型 保證類型安全 (不丟失類型信息)的同時(shí),可以 讓函數(shù)等與多種不同的類型一起工作 ,靈活可 復(fù)用 。
實(shí)際上,在 C#和 Java 等編程語言中,泛型都是用來實(shí)現(xiàn)可復(fù)用組件功能的主要工具之一。

創(chuàng)建泛型函數(shù)

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

解釋:
1. 語法:在函數(shù)名稱的后面添加 <> (尖括號(hào)), 尖括號(hào)中添加類型變量 ,比如此處的 Type。
2. 類型變量 Type, 是一種特殊類型的變量 它處理類型 而不是值。
3. 該類型變量相當(dāng)于一個(gè)類型容器,能夠捕獲用戶提供的類型(具體是什么類型由用戶調(diào)用該函數(shù)時(shí)指定)。
4. 因?yàn)?Type 是類型,因此可以將其作為函數(shù)參數(shù)和返回值的類型,表示參數(shù)和返回值具有相同的類型。
5. 類型變量 Type,可以是任意合法的變量名稱。

調(diào)用泛型函數(shù):

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

?前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

解釋:
1. 語法:在函數(shù)名稱的后面添加 <> (尖括號(hào)), 尖括號(hào)中指定具體的類型 ,比如,此處的 number。
2. 當(dāng)傳入類型 number 后,這個(gè)類型就會(huì)被函數(shù)聲明時(shí)指定的類型變量 Type 捕獲到。
3. 此時(shí),Type 的類型就是 number,所以,函數(shù) id 參數(shù)和返回值的類型也都是 number。
同樣,如果傳入類型 string,函數(shù) id 參數(shù)和返回值的類型就都是 string。
這樣,通過 泛型 就做到了讓 id 函數(shù)與多種不同的類型一起工作, 實(shí)現(xiàn)了復(fù)用的同時(shí)保證了類型安全 。

簡化調(diào)用泛型函數(shù):

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

解釋:
1. 在調(diào)用泛型函數(shù)時(shí), 可以省略 <類型> 來簡化泛型函數(shù)的調(diào)用 。
2. 此時(shí),TS 內(nèi)部會(huì)采用一種叫做 類型參數(shù)推斷 的機(jī)制,來根據(jù)傳入的實(shí)參自動(dòng)推斷出類型變量 Type 的類型。
3. 比如,傳入實(shí)參 10,TS 會(huì)自動(dòng)推斷出變量 num 的類型 number,并作為 Type 的類型。
推薦:使用這種簡化的方式調(diào)用泛型函數(shù),使代碼更短,更易于閱讀。
說明:當(dāng)編譯器無法推斷類型或者推斷的類型不準(zhǔn)確時(shí),就需要顯式地傳入類型參數(shù)

泛型約束?

默認(rèn)情況下,泛型函數(shù)的類型變量 Type 可以代表多個(gè)類型,這導(dǎo)致無法訪問任何屬性。
比如,id('a') 調(diào)用函數(shù)時(shí)獲取參數(shù)的長度:
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
解釋:Type 可以代表任意類型,無法保證一定存在 length 屬性,比如 number 類型就沒有 length。
此時(shí),就需要為泛型 添加約束 收縮類型 (縮窄類型取值范圍)。

添加泛型約束收縮類型,主要有以下兩種方式:1 指定更加具體的類型 2 添加約束。?

指定更加具體的類型

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

?比如,將類型修改為 Type[](Type 類型的數(shù)組),因?yàn)橹灰菙?shù)組就一定存在 length 屬性,因此就可以訪問了。

添加約束?

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

解釋:
1. 創(chuàng)建描述約束的接口 ILength,該接口要求提供 length 屬性。
2. 通過 extends 關(guān)鍵字使用該接口,為泛型(類型變量)添加約束。
3. 該約束表示: 傳入的類型必須具有 length 屬性 。
注意:傳入的實(shí)參(比如,數(shù)組)只要有 length 屬性即可,這也符合前面講到的接口的類型兼容性。
泛型的類型變量可以有多個(gè),并且 類型變量之間還可以約束 (比如,第二個(gè)類型變量受第一個(gè)類型變量約束)。
比如,創(chuàng)建一個(gè)函數(shù)來獲取對象中屬性的值:
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
解釋:
1. 添加了第二個(gè)類型變量 Key,兩個(gè)類型變量之間使用( , 逗號(hào) 分隔。
2. keyof 關(guān)鍵字 接收一個(gè)對象類型,生成其鍵名稱(可能是字符串或數(shù)字)的聯(lián)合類型 。
3. 本示例中 keyof Type 實(shí)際上獲取的是 person 對象所有鍵的聯(lián)合類型,也就是:'name' | 'age'。
4. 類型變量 Key 受 Type 約束,可以理解為:Key 只能是 Type 所有鍵中的任意一個(gè),或者說只能訪問對象中存在的屬性。

泛型接口?

接口也可以配合泛型來使用,以增加其靈活性,增強(qiáng)其復(fù)用性。
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
解釋:
1. 在接口名稱的后面添加 <類型變量> ,那么,這個(gè)接口就變成了泛型接口。
2. 接口的類型變量,對接口中所有其他成員可見,也就是 接口中所有成員都可以使用類型變量
3. 使用泛型接口時(shí), 需要顯式指定 具體的 類型 (比如,此處的 IdFunc<nunber>)。
4. 此時(shí),id 方法的參數(shù)和返回值類型都是 number;ids 方法的返回值類型是 number[]。
實(shí)際上,JS 中的數(shù)組在 TS 中就是一個(gè) 泛型接口
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
解釋:當(dāng)我們在使用數(shù)組時(shí),TS 會(huì)根據(jù)數(shù)組的不同類型,來自動(dòng)將類型變量設(shè)置為相應(yīng)的類型。
技巧:可以通過 Ctrl + 鼠標(biāo)左鍵(Mac:option + 鼠標(biāo)左鍵)來查看具體的類型信息。

泛型類

class 也可以配合泛型來使用。

比如,React 的 class 組件的基類 Component 就是泛型類,不同的組件有不同的 props 和 state。

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

解釋:React.Component 泛型類兩個(gè)類型變量,分別指定 props 和 state 類型。?

創(chuàng)建泛型類:

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

解釋:
1. 類似于泛型接口,在 class 名稱后面添加 <類型變量> ,這個(gè)類就變成了泛型類。
2. 此處的 add 方法,采用的是箭頭函數(shù)形式的類型書寫方式。
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
類似于泛型接口,在創(chuàng)建 class 實(shí)例時(shí),在類名后面通過 <類型> 來指定明確的類型。

泛型工具類型?

TS 內(nèi)置了一些常用的工具類型,來簡化 TS 中的一些常見操作。
說明:它們都是 基于泛型實(shí)現(xiàn) 的(泛型適用于多種類型,更加通用),并且是內(nèi)置的,可以直接在代碼中使用。
這些工具類型有很多,主要學(xué)習(xí)以下幾個(gè):
1. Partial<Type>
2. Readonly<Type>
3. Pick<Type, Keys>
4. Record<Keys, Type>

Partial<Type>?

泛型工具類型 - Partial<Type> 用來構(gòu)造(創(chuàng)建)一個(gè)類型,將 Type 的所有屬性設(shè)置為可選 。
前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript
解釋:構(gòu)造出來的新類型 PartialProps 結(jié)構(gòu)和 Props 相同,但所有屬性都變?yōu)榭蛇x的。

Readonly<Type>?

泛型工具類型 - Readonly<Type> 用來構(gòu)造一個(gè)類型,將 Type 的所有屬性都設(shè)置為 readonly(只讀)。

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript?解釋:構(gòu)造出來的新類型 ReadonlyProps 結(jié)構(gòu)和 Props 相同,但所有屬性都變?yōu)橹蛔x的。

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

當(dāng)我們想重新給 id 屬性賦值時(shí),就會(huì)報(bào)錯(cuò):無法分配到 "id" ,因?yàn)樗侵蛔x屬性。

Pick<Type, Keys>?

泛型工具類型 - Pick<Type, Keys> 從 Type 中選擇一組屬性來構(gòu)造新類型。?

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript

解釋:
1. Pick 工具類型有兩個(gè)類型變量:1 表示選擇誰的屬性 2 表示選擇哪幾個(gè)屬性。
2. 其中第二個(gè)類型變量,如果只選擇一個(gè)則只傳入該屬性名即可。
3. 第二個(gè)類型變量傳入的屬性只能是第一個(gè)類型變量中存在的屬性 。
4. 構(gòu)造出來的新類型 PickProps,只有 id 和 title 兩個(gè)屬性類型。

Record<Keys, Type>?

泛型工具類型 - Record<Keys,Type> 構(gòu)造一個(gè)對象類型,屬性鍵為 Keys,屬性類型為 Type

前端TypeScript學(xué)習(xí)day04-交叉類型與泛型,# 前端typescript入門,學(xué)習(xí),前端,javascript,vscode,typescript文章來源地址http://www.zghlxwxcb.cn/news/detail-713276.html

解釋:
1. Record 工具類型有兩個(gè)類型變量: 1 表示對象有哪些屬性 2 表示對象屬性的類型 。
2. 構(gòu)建的新對象類型 RecordObj 表示:這個(gè)對象有三個(gè)屬性分別為a/b/c,屬性值的類型都是 string[]。

到了這里,關(guān)于前端TypeScript學(xué)習(xí)day04-交叉類型與泛型的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端TypeScript學(xué)習(xí)day01-TS介紹與TS部分常用類型

    前端TypeScript學(xué)習(xí)day01-TS介紹與TS部分常用類型

    (創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動(dòng)力,如果看完對你有幫助,請留下您的足跡) 目錄 TypeScript 介紹 TypeScript 是什么 TypeScript 為什么要為 JS 添加類型支持?? TypeScript 相比 JS 的優(yōu)勢? TypeScript 初體驗(yàn)? 安裝編譯 TS 的工具包 編譯并運(yùn)行 TS 代碼 簡化運(yùn)行 TS

    2024年02月08日
    瀏覽(22)
  • TypeScript 學(xué)習(xí)筆記(一):基本類型、交叉類型、聯(lián)合類型、類型斷言

    TypeScript 學(xué)習(xí)筆記(一):基本類型、交叉類型、聯(lián)合類型、類型斷言

    TS中實(shí)現(xiàn)對象屬性必選、對象屬性在開發(fā)過程中十分常見,前端在傳參數(shù)時(shí),有些參數(shù)比必傳,有些是選傳,我們可以定一個(gè)多個(gè)對象來實(shí)現(xiàn)傳參,但是這讓代碼變得冗余。我們可以通過TS定義數(shù)據(jù)類型來實(shí)現(xiàn)。 TypeScript中文網(wǎng) 1. 數(shù)組 2. 布爾 3. 數(shù)值 當(dāng)我們給num賦值為123但沒有

    2024年02月15日
    瀏覽(24)
  • TypeScript 學(xué)習(xí)筆記 環(huán)境安裝-類型注解-語法細(xì)節(jié)-類-接口-泛型

    TypeScript 學(xué)習(xí)筆記 環(huán)境安裝-類型注解-語法細(xì)節(jié)-類-接口-泛型

    JavaScript的變量類型相當(dāng)于是動(dòng)態(tài)類型,可以跟隨著賦值的改變而類型改變,函數(shù)的參數(shù)也沒有設(shè)定類型,所以在定位錯(cuò)誤以及安全性上不太夠。 說明 1.TS不能被JS解析器直接執(zhí)行,需要編譯成JS執(zhí)行 2.即使TS編譯出錯(cuò)也可以編譯成JS 1.TypeScript是什么? TypeScript 是類型安全的Ja

    2024年02月16日
    瀏覽(36)
  • From Java To Kotlin 2:Kotlin 類型系統(tǒng)與泛型

    上期主要分享了 From Java To Kotlin 1 :空安全、擴(kuò)展、函數(shù)、Lambda。 這是 From Java ?to Kotlin ? 第二期。 From Java ?to Kotlin ?關(guān)鍵在于 思維的轉(zhuǎn)變 。 Kotlin 中大部分語句是 表達(dá)式 。 表達(dá)式思維是一種編程思維。 編程思維是一種非常抽象的概念,很多時(shí)候是只可意會(huì)不可言傳的。

    2024年02月08日
    瀏覽(21)
  • TypeScript高級類型:聯(lián)合類型、交叉類型和類型別名

    TypeScript 是一門強(qiáng)類型語言,其高級類型功能使得開發(fā)者能夠更加靈活地定義類型并對其進(jìn)行操作,以便于更好地編寫可維護(hù)和可擴(kuò)展的代碼。 在本文中,將著重討論三種高級類型:聯(lián)合類型、交叉類型和類型別名。我們將詳細(xì)介紹這些類型,并且還會(huì)提供一些有用的代碼示

    2024年02月10日
    瀏覽(40)
  • typescript & 交叉類型

    typescript & 交叉類型

    TypeScript中的交叉類型是指將多個(gè)類型合并為一個(gè)類型。這使得我們可以將現(xiàn)有的多種類型疊加到一起成為一種類型,它包含了所需的所有類型的特性。 寫這篇文章先問大家一個(gè)問題,如何讓一個(gè)對象既有a類型約束,又有b類型約束? 如果你看了我這篇文章typescrip接口 interface詳解

    2024年02月07日
    瀏覽(27)
  • TypeScript中的對象類型(可選屬性 只讀屬性 交叉類型)

    一、定義對象類型 在TypeScript中定義對象類型有以下三種方式: 1. 匿名對象類型 匿名對象類型是在定義變量時(shí)直接使用花括號(hào){},來定義一個(gè)對象類型。例如: 上述代碼中定義了一個(gè)person變量,它的類型為對象,它有兩個(gè)屬性:name和age,其中name屬性的類型為字符串,age屬性

    2024年02月11日
    瀏覽(45)
  • ts 終于搞懂TS中的泛型啦! | typescript 入門指南 04

    ts 終于搞懂TS中的泛型啦! | typescript 入門指南 04

    大家好,我是王天~ 這篇文章是 ts入門指南系列中第四篇,主要講解ts中的泛型應(yīng)用,泛型在ts中是比較重要的概念,我花挺長時(shí)間才搞明白的,希望能幫助到大家 ~ ** ts 入門指南系列 ** Ts和Js 誰更適合前端開發(fā)?| typescript 入門指南 01 詳解tsconfig.json 配置文件 | 02 ts入門指南

    2024年02月08日
    瀏覽(25)
  • 談?wù)劙b類與泛型

    談?wù)劙b類與泛型

    目錄 包裝類 基本數(shù)據(jù)類型與對應(yīng)的包裝類 裝箱和拆箱 裝箱 拆箱 泛型 什么是泛型 泛型的語法與使用 泛型的編譯 擦除機(jī)制 泛型的上界 泛型方法 提到泛型的話,我們就先提一下包裝類吧! 在Java中,由于基本類型不是繼承自O(shè)bject,為了在 泛型代碼 中可以 支持基本類型 ,

    2024年02月06日
    瀏覽(24)
  • 第十三章,枚舉與泛型例題

    第十三章,枚舉與泛型例題

    例題1 結(jié)果 ? 例題2 結(jié)果 ? 例題3 結(jié)果? ? ?例題4 結(jié)果 例題5 ?結(jié)果 例題6 ?結(jié)果 例題7 ?結(jié)果 例題8 ?結(jié)果

    2024年02月06日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包