TypeScript 交叉类型(intersection type)
在TS中和聯(lián)合類型(union type)對應(yīng)的還有交叉類型(intersection type)。
交叉類型的出現(xiàn)主要為了組合多個對象類型(object type),因為相對于interface,object type沒法繼承,那么就可以通過union type來實現(xiàn)混合的目的,從而實現(xiàn)繼承的功能。
經(jīng)過objtype1和objtype2交叉objtype 變成了 {a: string, b: string}。現(xiàn)在的問題是為什么兩個對象類型的交叉是兩個對象類型的和?
我們知道聯(lián)合和交叉都是針對集合的運算,兩個集合的交叉應(yīng)該是集合相交的部分:
這時的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é)論就是一個對象類型在某種情況下表示的是自身類型+任意額外類型組合組成的一個集合。
所以在參與交叉的時候:
這樣兩個集合的交集就能得到目標(biāo)類型{a: string, b: string}。
以上是我對交叉類型作用于對象類型的個人理解,并沒有找到相關(guān)文檔給予的支持,僅供參考。
總結(jié)
以上是生活随笔為你收集整理的TypeScript 交叉类型(intersection type)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeScript 联合类型(unio
- 下一篇: TypeScript类型推论(Type