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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeScript 交叉类型(intersection type)

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

在TS中和聯(lián)合類型(union type)對應(yīng)的還有交叉類型(intersection type)。
交叉類型的出現(xiàn)主要為了組合多個對象類型(object type),因為相對于interface,object type沒法繼承,那么就可以通過union type來實現(xiàn)混合的目的,從而實現(xiàn)繼承的功能。

type objtype1 = {a: string} type objtype2 = {b: string} type objtype = objtype1 & objtype2function logObj(obj: objtype) {console.log(obj.a, obj.b) }

經(jīng)過objtype1和objtype2交叉objtype 變成了 {a: string, b: string}。現(xiàn)在的問題是為什么兩個對象類型的交叉是兩個對象類型的和?
我們知道聯(lián)合和交叉都是針對集合的運算,兩個集合的交叉應(yīng)該是集合相交的部分:

type type1 = 1 | 2 type type2 = 1 | 3 type typea = type1 & type2

這時的typea是1,這個很好理解,因為type1是1 | 2,可以看成一個集合,這樣兩個結(jié)合的交集就是1這個類型。

我認(rèn)為要解釋兩個對象類型的交叉結(jié)果是兩個對象類型的和,這個問題需要結(jié)合類型兼容性去理解。

interface Pet {name: string; } let pet: Pet;let dog = { name: "Lassie", owner: "Rudd Weatherwax" }; pet = dog;

上面Pet類型的變量pet可以被dog對象賦值,而dog類型是{name: string, owner: string},所以簡理解為Pet和類型{name: string, owner: string}是兼容的,而兼容的方式可以簡單理解type Pet = {name: string} | {name: string, owner: string}這樣Pet就成了一個集合,而這個集合參與交叉的時候自然會的出和的結(jié)果。結(jié)論就是一個對象類型在某種情況下表示的是自身類型+任意額外類型組合組成的一個集合。
所以在參與交叉的時候:

type objtype1 = {a: string} 可以被看成 type objtype = {a: string} | {a: string, b: string} type objtype2 = {b: string} 可以被看成 type objtype2 = {b: string} | {b: string, a: string}

這樣兩個集合的交集就能得到目標(biāo)類型{a: string, b: string}。

以上是我對交叉類型作用于對象類型的個人理解,并沒有找到相關(guān)文檔給予的支持,僅供參考。

總結(jié)

以上是生活随笔為你收集整理的TypeScript 交叉类型(intersection type)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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