TypeScript 交叉类型(intersection type)
在TS中和聯(lián)合類型(union type)對(duì)應(yīng)的還有交叉類型(intersection type)。
交叉類型的出現(xiàn)主要為了組合多個(gè)對(duì)象類型(object type),因?yàn)橄鄬?duì)于interface,object type沒法繼承,那么就可以通過union type來實(shí)現(xiàn)混合的目的,從而實(shí)現(xiàn)繼承的功能。
經(jīng)過objtype1和objtype2交叉objtype 變成了 {a: string, b: string}?,F(xiàn)在的問題是為什么兩個(gè)對(duì)象類型的交叉是兩個(gè)對(duì)象類型的和?
我們知道聯(lián)合和交叉都是針對(duì)集合的運(yùn)算,兩個(gè)集合的交叉應(yīng)該是集合相交的部分:
這時(shí)的typea是1,這個(gè)很好理解,因?yàn)閠ype1是1 | 2,可以看成一個(gè)集合,這樣兩個(gè)結(jié)合的交集就是1這個(gè)類型。
我認(rèn)為要解釋兩個(gè)對(duì)象類型的交叉結(jié)果是兩個(gè)對(duì)象類型的和,這個(gè)問題需要結(jié)合類型兼容性去理解。
interface Pet {name: string; } let pet: Pet;let dog = { name: "Lassie", owner: "Rudd Weatherwax" }; pet = dog;上面Pet類型的變量pet可以被dog對(duì)象賦值,而dog類型是{name: string, owner: string},所以簡(jiǎn)理解為Pet和類型{name: string, owner: string}是兼容的,而兼容的方式可以簡(jiǎn)單理解type Pet = {name: string} | {name: string, owner: string}這樣Pet就成了一個(gè)集合,而這個(gè)集合參與交叉的時(shí)候自然會(huì)的出和的結(jié)果。結(jié)論就是一個(gè)對(duì)象類型在某種情況下表示的是自身類型+任意額外類型組合組成的一個(gè)集合。
所以在參與交叉的時(shí)候:
這樣兩個(gè)集合的交集就能得到目標(biāo)類型{a: string, b: string}。
以上是我對(duì)交叉類型作用于對(duì)象類型的個(gè)人理解,并沒有找到相關(guān)文檔給予的支持,僅供參考。
總結(jié)
以上是生活随笔為你收集整理的TypeScript 交叉类型(intersection type)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeScript 联合类型(unio
- 下一篇: TypeScript类型推论(Type